NHibernate 3.3 でコードによってマッピングするときに、テーブルにチェック制約を設定するにはどうすればよいですか?
つまり、次の hbm に相当するコード:
<class name="myclass" table="mytable" check="(col1 = col2 AND col2 > col3)">
... columns ...
</class>
NHibernate 3.3 でコードによってマッピングするときに、テーブルにチェック制約を設定するにはどうすればよいですか?
つまり、次の hbm に相当するコード:
<class name="myclass" table="mytable" check="(col1 = col2 AND col2 > col3)">
... columns ...
</class>
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 > ''''"));
})
}
残念ながら、何らかの理由でクラス チェックをクラス マッピングに追加することはできません。さらに、1 つのチェックのみがサポートされます。複数のチェックが指定されている場合は、最後のチェックが優先されます。これは、チェックを 1 つに AND チェーンすることで回避できます。完全な回避策は次のとおりです。
mapper.BeforeMapClass += (inspect, member, custom) => {
if (member.GetType() == typeof(EntityType)) {
custom.Check("Name > '''' AND Creator > ''''");
}
}