我有一个问题。我想在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
请帮我
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您在NHibernate中尝试使用version
进行乐观锁控制,并希望将版本属性从整型(int)更改为时间戳类型,但遇到了错误提示“版本属性必须为int”。这里的问题在于NHibernate的<version>
标签默认期望一个整数类型的属性来实现乐观锁策略。如果您希望使用时间戳类型,NHibernate同样支持,但需要指定正确的类型映射。
要解决这个问题并使用timestamp作为版本控制,您应该按照以下步骤操作:
DateTime
。[Class(Table="COMMENTS")]
public class Comment {
private DateTime version;
[Version]
public virtual DateTime Version {
get { return version; }
set { version = value; }
}
}
<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对特定数据库的支持文档进行适当调整。