通常属性/列的定义如下:
<property name="DocumentSummary" column="DocumentSummary" length="100" type="String">
<column name="DocumentSummary" />
</property>
我原以为NHibernate会在插入/更新行之前使用长度属性验证数据。不幸的是,这似乎是无效的假设。那么问题是NHibernate是否正在使用长度属性?为每个属性设置长度属性是否有意义?
通常属性/列的定义如下:
<property name="DocumentSummary" column="DocumentSummary" length="100" type="String">
<column name="DocumentSummary" />
</property>
我原以为NHibernate会在插入/更新行之前使用长度属性验证数据。不幸的是,这似乎是无效的假设。那么问题是NHibernate是否正在使用长度属性?为每个属性设置长度属性是否有意义?
它使用它来创建数据库定义SQL。请查看SchemaExport类。
是的,设置Length
属性会在具有超过默认最大长度的字符串列时产生不同。
我们有一个NVARCHAR(MAX)
类型的列。如果我们没有设置length
属性,NHibernate将无法设置字符串值,如果该值的长度大于4096个字符。
(此示例使用Mapping-By-Code,因为我们在2017年 :-)
classMapper.Property(
tickerFeed => tickerFeed.StaticTickerText,
propertyMapper =>
{
propertyMapper.Column("StaticTickerText");
propertyMapper.Length(int.MaxValue);
}
);
然而,我们发现可以使用IPropertyMapper.Type
来指定它是一个大字符串,从而实现相同的结果。
classMapper.Property(
tickerFeed => tickerFeed.StaticTickerText,
propertyMapper =>
{
propertyMapper.Column("StaticTickerText");
propertyMapper.Type(NHibernateUtil.StringClob);
}
);
我们最终选择了propertyMapper.Type
选项,因为它更加明确。