【问题标题】:NHibernate + ViewModel +MVC + Optimistic lockNHibernate + ViewModel +MVC + 乐观锁
【发布时间】:2010-12-09 21:27:13
【问题描述】:

好的,我们有以下 senario,但是你怎么做Optimistic Locking

我们有一个客户类

  • 姓名
  • 地址
  • 版本

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

现在我们有 Martin 打开 Customer 129,与视图模型一样,模型对象被展平到视图模型中,然后传递到客户编辑屏幕。

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

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

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

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

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

提前多谢

【问题讨论】:

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


    【解决方案1】:

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

    你需要做的是这样的:

    编辑请求:

    • 加载实体
    • 将实体推入 ViewModel(包括版本号)
    • 等等……

    保存请求:

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

    【讨论】:

    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多