我正在学习使用 NHibernate 验证器,它是 Fluent API (Loquacious)。
我注意到我不能将整数属性或可为空的 int 属性(int?)设置为不可为空。那么,为什么不呢?
在数据库中,整数列可以有空值。更糟糕的是,当我使用 SchemaExport 生成 DDL 时,整数列不会拾取该非空性(除非我在 Nhibernate 映射中表达它)。
我正在学习使用 NHibernate 验证器,它是 Fluent API (Loquacious)。
我注意到我不能将整数属性或可为空的 int 属性(int?)设置为不可为空。那么,为什么不呢?
在数据库中,整数列可以有空值。更糟糕的是,当我使用 SchemaExport 生成 DDL 时,整数列不会拾取该非空性(除非我在 Nhibernate 映射中表达它)。
你已经给出了答案。验证器不会被模式导出扫描。您必须使用映射。
如果您使用 指定验证器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,
...
)
NHibernate 验证器位于 NHibernate 之上。它用于根据 NHibernate 映射和自定义规则验证实体。对于配置字段属性,例如它们是否可以为空,这是在 NHibernate 映射中完成的,因为它不仅会影响完成的验证,还会影响生成的 SQL 语句。