好的,我们有以下的 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/