NHibernate + ViewModel + MVC +乐观锁

时间:2010-12-09 21:27:13

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

好的,我们有以下服装,但您如何做Optimistic Locking

我们有一个客户类

  • 名称
  • 地址

版本是碰撞变量(int),当编辑行时,版本将增加1。

现在我们让Martin打开Customer 129,与视图模型一样,模型对象被展平到View Model中,然后传递到Customer Edit屏幕。

大卫同时也打开客户129进行编辑,更改名称并保存。

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

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

  • 必须将版权号推入ViewModel?然后,在提交更新时,加载当前的Model对象并检查版本号
  • 或者是更好的方式(我知道如果我在同一个会话中加载,编辑和更新,NH会进行版本控制)

另外一件事,这个场景将在服务器场上使用,而不是共享缓存

非常感谢提前

1 个答案:

答案 0 :(得分:2)

这实际上是一个离线锁,NHibernate没有处理。

您需要做的是:

编辑请求:

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

保存请求:

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