首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate版本控制

NHibernate版本控制
EN

Stack Overflow用户
提问于 2012-11-27 17:19:59
回答 2查看 202关注 0票数 0

我目前对使用版本字段为实体创建映射很感兴趣。然而,我对如何在web环境中使用版本控制感到困惑。在大多数例子中,我见过一个实体在using语句中被更新,而且是立即发生的。

在web示例中,实体在HTTP GET中获取,并且在客户端调用HTTP POST之前不会更新。我通常在post中做的是再次获取实体,更新数据并存储它。但是在我的GET和POST之间,这个实体可能已经改变了。我应该在保存之前自己检查版本字段吗?或者有更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-27 17:38:16

是的,我想你需要自己去检查一下。可以这样做的一种方法是,当您在初始get中检索实体并将其发送回调用者时,在响应中包括版本号。当你写文章的时候,包括版本号。在服务器端,当您重新读取附加的nHibernate实体时,从它获取当前的版本号。如果您的版本号已过期,请停止更新。

票数 2
EN

Stack Overflow用户

发布于 2012-11-27 19:50:40

版本1)可以手动检查,或者2)依赖于数据库中内置的NHibernate版本控制功能和时间戳类型。(SQL Server支持它-但大多数情况下其他数据库也支持它)。在第二种情况下,我们必须处理exception

下面将详细说明如何在NHibernate http://ayende.com/blog/3946/nhibernate-mapping-concurrency中处理并发

如果您使用的是SQL Server,则可以创建列

代码语言:javascript
复制
CREATE TABLE [dbo].[MyTable](
 ...
 [Version] [rowversion] NOT NULL -- new keyword for deprecated [timestamp]
 ...

然后调整版本映射:

代码语言:javascript
复制
<version name="Version" generated="always" unsaved-value="null" type="BinaryBlob">
  <column name="Version" not-null="false" sql-type="timestamp" />
</version>

您还应该/需要将版本号传递给客户端,并在POST时绑定它(例如base64)

每当您尝试session.Update(entity)时,NHibernate都会抛出NHibernate.StaleObjectStateException.只有在这种情况下你才能处理它。如果版本匹配,则所有操作都将正常工作,并且UPDATE语句将成功。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13580901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档