NHibernate - 设置属性/列的长度属性有意义吗?

3

通常属性/列的定义如下:

<property name="DocumentSummary" column="DocumentSummary" length="100" type="String">
   <column name="DocumentSummary" />
</property>

我原以为NHibernate会在插入/更新行之前使用长度属性验证数据。不幸的是,这似乎是无效的假设。那么问题是NHibernate是否正在使用长度属性?为每个属性设置长度属性是否有意义?

3个回答

4

它使用它来创建数据库定义SQL。请查看SchemaExport类。


1

此外,您可能能够通过编程从映射中提取长度,请参见this问题。请注意,这是针对Java Hibernate的,但我相信您可能能够将其翻译为NHibernate。


0

是的,设置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选项,因为它更加明确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接