在我的地图中,我有:
Component(
x => x.ExposureKey,
m => {
m.Map(x => x.AsOfDate).Not.Nullable();
m.Map(x => x.ExposureId).Length(30).Not.Nullable();
}
).Unique();
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>
明显缺少unique="true"
定义中的component
。
为什么会这样?
答案 0 :(得分:0)
您使用的是最新版本的Fluent NHibernate吗?根据{{3}}(流利的NHibernate贡献者),它应该有用。
// 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");
检查生成的SQL是否实际上设置了Unique
属性也是一件好事,即使hbm映射文件没有(可能是一个小bug)。