5

Dans ma carte J'ai:Pourquoi Fluent NHibernate ignore-t-il ma contrainte unique sur un composant?

Component(
    x => x.ExposureKey, 
    m => { 
     m.Map(x => x.AsOfDate).Not.Nullable(); 
     m.Map(x => x.ExposureId).Length(30).Not.Nullable(); 
    } 
).Unique(); 

La sortie correspondante de l'HBM est

<component name="ExposureKey" insert="true" update="true" optimistic-lock="true" class="Some.Namespace.CreditExposureKey, Some.Namespace, Version=0.0.0.0, Culture=neutral, PublicKeyToken=aaaaaaaaaaaaaaaa"> 
    <property name="AsOfDate" type="System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="AsOfDate" not-null="true"/> 
    </property> 
    <property name="ExposureId" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="ExposureId" length="30" not-null="true"/> 
    </property> 
</component> 

qui manque clairement unique="true" de la définition component.

Pourquoi cela se produit-il?

Répondre

0

Utilisez-vous la dernière version de Fluent NHibernate? Selon James Gregory (contributeur Fluent NHibernate), cela devrait fonctionner.

// Else, try this hack: 
Component(x => x.ExposureKey, m => 
{ 
    m.Map(x => x.AsOfDate).Not.Nullable(); 
    m.Map(x => x.ExposureId).Length(30).Not.Nullable(); 
}).SetAttribute("unique", "true"); 

Il serait également bon de vérifier si le SQL généré est en fait la propriété Unique, même lorsqu'aucun les fichiers de mappage de HBM ne (pourrait être un petit bug).

+0

Je vais essayer une version plus récente (j'utilise le build 685 alors que le courant est de 694). Je pense que SetAttribute a été supprimé. Le SQL généré n'a pas le jeu de propriétés 'unique' (et il ne devrait pas le faire puisqu'il n'est pas dans le mapping!). – jason

+0

Mise à jour vers la dernière version (694). Toujours pas aller. – jason

+0

@Jason: C'est bizarre ++ et mon VS à la maison agit comme un fou. J'espère que vous obtiendrez une réponse avant d'essayer de reproduire cela au travail (dans environ 12 heures). Qu'est-ce que c'est, MSSQL/MySQL? – rebelliard