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

时间:2009-03-10 20:21:46

标签: nhibernate nhibernate-mapping

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

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

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

3 个答案:

答案 0 :(得分:4)

用它来创建数据库定义sql。看看SchemaExport类。

答案 1 :(得分:1)

您也可以通过编程方式从映射中提取长度,请参阅this问题。请注意,这适用于Java Hibernate,但我相信您可以将其转换为NHibernate。

答案 2 :(得分:0)

是的,设置Length属性会使字符串列的长度超出默认最大长度。

我们有一个NVARCHAR(MAX)类型的列。如果我们没有设置length属性,如果值的长度大于4096个字符,NHibernate将无法设置字符串值。

(此示例使用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选项,因为它更明确。