3

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

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

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

4

3 回答 3

4

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

于 2009-03-10T20:27:04.310 回答
1

此外,您可能能够以编程方式从映射中提取长度,请参阅问题。请注意,这是针对 Java Hibernate,但我相信您可以将其转换为 NHibernate。

于 2009-03-10T20:30:04.163 回答
0

是的,在字符串列的长度超过默认最大长度的情况下,设置Length属性会有所不同。

我们有一列 type 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选项,因为它更明确。

于 2017-06-09T04:08:18.643 回答