如何在NHibernate 3.3中的代碼映射時在表上設置檢查約束?在使用nhibernate映射時設置CHECK約束
即代碼當量以下HBM:
<class name="myclass" table="mytable" check="(col1 = col2 AND col2 > col3)">
... columns ...
</class>
如何在NHibernate 3.3中的代碼映射時在表上設置檢查約束?在使用nhibernate映射時設置CHECK約束
即代碼當量以下HBM:
<class name="myclass" table="mytable" check="(col1 = col2 AND col2 > col3)">
... columns ...
</class>
添加約束腳本到NH配置中設置作爲輔助數據庫對象似乎工作,雖然不是最乾淨的解決方案..
config.AddAuxiliaryDatabaseObject(new SimpleAuxiliaryDatabaseObject("ALTER TABLE mytable ADD CONSTRAINT myconstraint CHECK (col1 = col2 AND col2 > col3)",
"ALTER TABLE mytable DROP CONSTRAINT myconstraint"));
的"check"
屬性不能由mapping-by-code
在NHibernate的3.3
奇異表格檢查suppor t已添加到NHibernate 4.0.0-Alpha2中;列檢查可能在此之前,但我不知道什麼時候。
假設你有這樣的聲明:
var mapper = new ConventionModelMapper();
列檢查可以添加這樣的:
mapper.Class<EntityType>(en => {
en.Property(x => x.Name, pm => {
pm.Column(c => c.Check("Name > ''''"));
})
}
類檢查可惜不能在類映射添加的某些原因。另外,只支持一個支票。如果指定了多個檢查,則最後一個檢查獲勝。這可以通過將檢查和併入一個來解決。一個完整的解決方法是這樣的:
mapper.BeforeMapClass += (inspect, member, custom) => {
if (member.GetType() == typeof(EntityType)) {
custom.Check("Name > '''' AND Creator > ''''");
}
}