2013-06-25 67 views
2

如何在NHibernate 3.3中的代碼映射時在表上設置檢查約束?在使用nhibernate映射時設置CHECK約束

即代碼當量以下HBM:

<class name="myclass" table="mytable" check="(col1 = col2 AND col2 > col3)"> 
... columns ... 
</class> 

回答

1

添加約束腳本到NH配置中設置作爲輔助數據庫對象似乎工作,雖然不是最乾淨的解決方案..

config.AddAuxiliaryDatabaseObject(new SimpleAuxiliaryDatabaseObject("ALTER TABLE mytable ADD CONSTRAINT myconstraint CHECK (col1 = col2 AND col2 > col3)", 
      "ALTER TABLE mytable DROP CONSTRAINT myconstraint")); 
1

"check"屬性不能由mapping-by-code在NHibernate的3.3

0

奇異表格檢查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 > ''''"); 
    } 
}