5

W mojej mapie mam:Dlaczego Fluent NHibernate ignoruje moje unikalne ograniczenie na komponencie?

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

Odpowiednie wyjście z HBM jest

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

który jest wyraźnie brakuje unique="true" z definicji component.

Dlaczego tak się dzieje?

Odpowiedz

0

Czy używasz najnowszej wersji Fluent NHibernate? Według James Gregory (Fluent NHibernate contributor), powinien działać.

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

Byłoby również dobrze, aby sprawdzić, czy faktycznie generowane SQL posiada właściwość Unique ustawić nawet jeśli pliki mapowania HBM nie (może być mały bug).

+0

Spróbuję nowszej wersji (używam kompilacji 685, a obecna to 694). Myślę, że "SetAttribute" został usunięty. Wygenerowany SQL nie ma zestawu właściwości "unikalny" (i nie powinien, ponieważ nie ma go w odwzorowaniu!). – jason

+0

Zaktualizowano do najnowszej wersji (694). Wciąż nie ma wyjścia. – jason

+0

@Jason: To jest dziwne ++ i mój VS w domu działa jak szalony. Mam nadzieję, że otrzymasz odpowiedź, zanim spróbuję replikować to w pracy (za około 12 godzin). Co to jest, MSSQL/MySQL? – rebelliard