1

在 NHibernate 3.3 中通过代码映射时如何在表上设置检查约束?

即以下 hbm 的等效代码:

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

3 回答 3

1

在 NHibernate 3.3"check"中无法设置该属性mapping-by-code

于 2013-06-25T04:46:38.300 回答
1

将约束脚本作为辅助数据库对象添加到 NH 配置似乎可行,尽管不是最干净的解决方案。

config.AddAuxiliaryDatabaseObject(new SimpleAuxiliaryDatabaseObject("ALTER TABLE mytable ADD CONSTRAINT myconstraint CHECK (col1 = col2 AND col2 > col3)",
            "ALTER TABLE mytable DROP CONSTRAINT myconstraint"));
于 2013-06-27T10:42:46.320 回答
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 > ''''"));
  })
}

不幸的是,由于某种原因,无法在类映射中添加类检查。此外,仅支持一项检查。如果指定了多个检查,则最后一个获胜。这可以通过将检查链接成一个来解决。一个完整的解决方法是这样的:

mapper.BeforeMapClass += (inspect, member, custom) => {
  if (member.GetType() == typeof(EntityType)) {
    custom.Check("Name > '''' AND Creator > ''''");
  }
}
于 2017-08-07T14:54:32.957 回答