【问题标题】:NHibernate - Trying to get it to use a SQL Server Row versionNHibernate - 试图让它使用 SQL Server Row 版本
【发布时间】:2009-12-27 20:24:53
【问题描述】:

根据 StackOverflow 问题“NHibernate 和 sql 时间戳列作为版本”,我使用以下映射:

<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 应用程序时,我得到:

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

但据我所知,2.2 是映射的最新版本,那么任何人都可以在版本元素中放置一个列元素吗?

对不起,如果这真的很基本,

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    如果其他人有这个问题:

    它的工作原理与 Ayende Rahien 在 NHibernate 上的这篇博客中指定的一样 - 但仅限于 2.1.n 版(AFAIK);我使用的是 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 服务器的“时间戳”不是您的常规时间戳,因此要求类型应该是二进制 blob。

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

    【讨论】:

      【解决方案2】:

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

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

      最好的问候,
      奥利弗·哈纳皮

      【讨论】:

      • 感谢您的回复 - 但这会产生:无法将 Byte[] 类型的字段 RowNumber0_ 中的值转换为 TimestampType 类型。请检查以确保映射正确并且您的 DataProvider 支持此数据类型。根据 Ayende 的博客,需要将 SQL 服务器行版本/时间戳映射到 BinaryBlob
      • 啊,我明白了。您是否尝试过 BinaryBlob 数据类型或 Int32 或类似的东西?我使用 Timestamp 是因为 NHibernate 文档说您只能使用很少的类型:Int64、Int32、Int16、Ticks、Timestamp 或 TimeSpan。
      猜你喜欢
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      相关资源
      最近更新 更多