5

En mi mapa que tengo:¿Por qué es NHibernate Fluent haciendo caso omiso de mi restricción única en 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 salida relevante desde el HBM es

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

que está claramente ausente unique="true" de la definición component.

¿Por qué sucede esto?

Respuesta

0

¿Estás utilizando la última versión de Fluent NHibernate? De acuerdo con James Gregory (colaborador fluido de NHibernate), debería funcionar.

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

También sería bueno para comprobar si el SQL generado en realidad tiene la propiedad Unique establecer incluso si los archivos de asignación de HBM no (podría ser un pequeño error).

+0

Probaré una versión más reciente (Estoy usando build 685 mientras que la actual es 694). Creo que 'SetAttribute' ha sido eliminado. El SQL generado no tiene el conjunto de propiedades 'unique' (¡y no debería ser así porque no está en la asignación!). – jason

+0

Actualizado a la última versión (694). Todavía no ir. – jason

+0

@Jason: Esto es extraño ++ y mi VS en casa está actuando loco. Espero que obtenga una respuesta antes de intentar replicar esto en el trabajo (en aproximadamente 12 horas). ¿Qué es esto, MSSQL/MySQL? – rebelliard

Cuestiones relacionadas