NHibernate - 试图让它使用SQL Server Row版本

时间:2009-12-27 20:24:54

标签: nhibernate

根据StackOverflow问题'NHibernate和sql timestamp列为版本',我使用以下映射:

                   

<version name="RowNumber" generated="always" unsaved-value="null" type="BinaryBlob">       
    <column name="RowNumber" not-null="false" sql-type="timestamp" />
</version>

<property name="CreateDate" column="CreateDate" type="DateTime" update="false" insert="false" />

(此后的其他属性)。

但是当我运行我的ASP.MVC应用程序时,我得到了:

[Path] \ Clients.hbm.xml(7,90):XML验证错误:元素'urn:nhibernate-mapping-2.2:version'不能包含子元素'urn:nhibernate-mapping-2.2:column'因为父元素的内容模型是空的。

但据我所知2.2是映射的最新版本,那么如何才能在版本元素中放置一个列元素呢?

很抱歉,如果这是非常基本的,

2 个答案:

答案 0 :(得分:1)

如果其他人遇到此问题:

Ayende Rahien在这篇关于NHibernate的博客中指出 - 但仅限于(AFAIK)版本2.1.n;我正在使用2.0.n.我还认为你需要对象的字段/属性为byte [],而不是System.Linq.Binary,因为该类型没有默认构造函数(但我不确定这一点 - 我似乎必须这样做)

示例(原谅名称):

<version name="RowKludge" type="BinaryBlob" generated="always"   unsaved-value="null" >
  <column name="RowNumber"
        not-null="false"
        sql-type="timestamp"/> 
</version>

SQL服务器'timestamp'不是您的常规时间戳,因此要求该类型应为二进制blob。

请注意,如果您进行迁移,则需要在Web / App配置中更改NHibernate配置 - 目前大多数教程似乎适用于v.2.0(或更早版本) - 您需要2.1的最新参考或教程

答案 1 :(得分:0)

快速查看documentation会发现您的映射不正确。它应该是这样的:

<version name="RowNumber" column="RowNumber"
         generated="always" unsaved-value="null"
         type="Timestamp" />

最诚挚的问候,
Oliver Hanappi