1

NHibernate 3.3 でコードによってマッピングするときに、テーブルにチェック制約を設定するにはどうすればよいですか?

つまり、次の hbm に相当するコード:

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

3 に答える 3

0

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 > ''''");
  }
}
于 2017-08-07T14:54:32.957 に答える