NHibernate + ViewModel +MVC + 乐观锁

标签 nhibernate asp.net-mvc-2 locking viewmodel

好的,我们有以下的 senario,但是你好吗 Optimistic Locking

我们有一个客户类

  • 姓名
  • 地址
  • 版本

版本是一个冲突变量 (int),当行被编辑时,版本将增加 1。

现在我们有 Martin 打开客户 129,对于 View 模型,模型对象被展平到 View 模型中,然后传递到客户编辑屏幕。

同时David也打开了Customer 129进行编辑,更改名称并保存。

仍在编辑客户(现在是旧版本)的 Martin 去保存他的更改,此时我希望看到一个 Lock 错误被抛出

问题是你如何处理 NH 的乐观锁定(使用 FluentNHibernate 进行映射),你会做吗

  • 必须将版本号推送到 ViewModel 中吗?然后在提交更新后,加载当前模型对象并检查版本号
  • 或者有更好的方法吗(我知道如果我在同一 session 中加载、编辑和更新,NH 会进行版本控制)

额外的一点,这个场景将在农场上使用,而不是共享缓存

提前致谢

最佳答案

这本质上是一个离线锁,NHibernate 不处理它。

你需要做的是:

编辑请求:

  • 加载实体
  • 将实体推送到 ViewModel(包括版本号)
  • 等...

保存请求:

  • (再次)加载实体
  • 根据实体检查 View 模型的版本号
    • 如果不相同则显示错误/协调选项
    • 否则更新实体等...

关于NHibernate + ViewModel +MVC + 乐观锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4403293/

相关文章:

c# - NHibernate 不尊重创建数字列(对于小数)的精度和比例

language-agnostic - 摆脱低级锁定的技术

asp.net-mvc - ASP.NET MVC 将 View 渲染为用于通过电子邮件发送的字符串

Java无缘无故地锁定文件

c++ - 包含指针的原子结构

c# - NHibernate分层递归查询

linq - 用于 NHibernate 的 Linq 中的 SQL IN 语句

c# - NHibernate 多对多映射不起作用

asp.net-mvc-2 - 如何在 ASP.NET MVC 2.0 中的 View 之外创建 HtmlHelper?

javascript - 当这些更改是通过 js 完成时,为什么数据上下文无法检测到绑定(bind)到数据 View 的控件的更改?