5

Nella mia mappa ho:Perché Fluent NHibernate ignora il mio vincolo univoco su un componente?

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

la relativa uscita dalla HBM è

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

che è chiaramente manca unique="true" dalla definizione component.

Perché sta succedendo?

risposta

0

Si sta utilizzando l'ultima versione di Fluent NHibernate? Secondo James Gregory (contributore fluente di NHibernate), dovrebbe funzionare.

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

Sarebbe anche bene verificare se l'SQL generato è in realtà la proprietà Unique impostata anche se i file di mapping HBM non (potrebbe essere un piccolo bug).

+0

Proverò una versione più recente (sto usando build 685 mentre corrente è 694). penso che 'SetAttribute' sia stato rimosso. L'SQL generato non ha il set di proprietà 'unique' (e non dovrebbe poiché non è nella mappatura!). – jason

+0

Aggiornato all'ultima build (694). Ancora no. – jason

+0

@ Jason: Questo è strano + e il mio VS a casa sta agendo come un matto. Spero che avrai una risposta prima di provare a replicare questo al lavoro (in circa 12 ore). Cos'è questo, MSSQL/MySQL? – rebelliard