5

In meiner Karte habe ich:Warum ignoriert Fluent NHibernate meine eindeutige Einschränkung für eine Komponente?

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

Die entsprechende Ausgabe von der HBM ist

<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> 

die eindeutig unique="true" aus der component Definition fehlt.

Warum passiert das?

Antwort

0

Verwenden Sie die neueste Version von Fluent NHibernate? Nach James Gregory (Fluent NHibernate Mitwirkende) sollte es funktionieren.

// 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"); 

Es wäre auch gut, wirklich zu überprüfen, ob die erzeugte SQL die auch Dateien (könnte ein kleiner Fehler sein) nicht, ob die hbm Mapping gesetzt Unique Eigenschaft hat.

+0

Ich werde versuchen, eine neuere Version (ich benutze Build 685, während die aktuelle 694 ist). Ich denke, dass 'SetAttribute' entfernt wurde. Das generierte SQL hat nicht die Eigenschaft 'unique' (und sollte es nicht, da es nicht im Mapping ist!). – jason

+0

Aktualisiert auf den letzten Build (694). Immer noch nicht gehen. – jason

+0

@Jason: Das ist seltsam ++ und mein VS zu Hause ist verrückt. Hoffentlich erhalten Sie eine Antwort, bevor ich versuche, dies bei der Arbeit zu replizieren (in ungefähr 12 Stunden). Was ist das, MSSQL/MySQL? – rebelliard

Verwandte Themen