开发者社区 问答 正文

使用时间戳在NHibernate中进行版本控制

我有一个问题。我想在NHibernate中使用version。当我编写下面的代码但要使用timestamp

[Class(Table="COMMENTS")]
public class Comment {
   private int version;
   [Versioning]
   public virtual int Version {
      get { return version; }
      set { version = value; } 
  }
}
<class name="Comment" table="COMMENTS">   <id ... >   </id>   <version name="Version" column="VERSION" />   ...</class>

当我更改属性类型时显示此错误。

InnerException:{“版本属性必须为int”} System.Exception

请帮我

展开
收起
心有灵_夕 2019-12-02 22:45:41 634 分享 版权
阿里云 AI 助理回答

您在NHibernate中尝试使用version进行乐观锁控制,并希望将版本属性从整型(int)更改为时间戳类型,但遇到了错误提示“版本属性必须为int”。这里的问题在于NHibernate的<version>标签默认期望一个整数类型的属性来实现乐观锁策略。如果您希望使用时间戳类型,NHibernate同样支持,但需要指定正确的类型映射。

解决方案

要解决这个问题并使用timestamp作为版本控制,您应该按照以下步骤操作:

  1. 更改属性类型:首先,将您的版本属性从整型更改为适合存储时间戳的数据类型,如DateTime
[Class(Table="COMMENTS")]
public class Comment {
   private DateTime version;
   [Version]
   public virtual DateTime Version {
      get { return version; }
      set { version = value; } 
  }
}
  1. 配置映射文件:在NHibernate的映射文件(XML格式)中,对于<version>元素,您需要指定其类型为timestamp。例如:
<class name="Comment" table="COMMENTS">
    ...
    <version name="Version" type="timestamp"/>
    ...
</class>

或者,如果您使用的是Fluent NHibernate等DSL方式配置映射,确保映射时指定了正确的数据库类型:

Map(x => x.Version).CustomType("timestamp");

通过上述调整,您可以使NHibernate以timestamp形式处理版本属性,从而满足您的需求。请注意,具体的类型名称(如timestamp)可能根据所使用的数据库方言有所不同,需参照NHibernate对特定数据库的支持文档进行适当调整。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: