1

我正在学习使用 NHibernate 验证器,它是 Fluent API (Loquacious)。

我注意到我不能将整数属性或可为空的 int 属性(int?)设置为不可为空。那么,为什么不呢?

在数据库中,整数列可以有空值。更糟糕的是,当我使用 SchemaExport 生成 DDL 时,整数列不会拾取该非空性(除非我在 Nhibernate 映射中表达它)。

4

3 回答 3

0

你已经给出了答案。验证器不会被模式导出扫描。您必须使用映射。

于 2010-09-17T22:09:49.203 回答
0

如果您使用 指定验证器ValidatorDef<>,模式导出会检测到这一点,您将获得适当的 SQL 定义,例如:

public class InvoiceValidationDef : ValidationDef<Invoice>
{
   public InvoiceValidationDef()
   {
       ...
       Define(x => x.Description).NotNullable().And.MaxLength(255);
       ...
   }
}

结果是

create table Invoices (
   ...
   Description NVARCHAR2(255) not null,
   ...
)
于 2011-03-16T12:13:22.147 回答
0

NHibernate 验证器位于 NHibernate 之上。它用于根据 NHibernate 映射和自定义规则验证实体。对于配置字段属性,例如它们是否可以为空,这是在 NHibernate 映射中完成的,因为它不仅会影响完成的验证,还会影响生成的 SQL 语句。

于 2010-09-21T21:13:31.567 回答