【问题标题】:NHibernate Optimistic ConcurrencyNHibernate 乐观并发
【发布时间】:2009-07-21 15:45:54
【问题描述】:

我正在研究 NHibernate 中的乐观并发。我有一个与这里描述的非常相似的场景:

http://weblogs.asp.net/stefansedich/archive/2008/10/01/set-the-value-of-a-version-column-in-nhibernate-manually.aspx

您是否建议采用本博文中提出的解决方案?

谢谢

【问题讨论】:

    标签: nhibernate concurrency


    【解决方案1】:

    该博客建议使用拦截器从数据库中重新加载当前版本号,以便使用从 DTO 对象通过实体传入的版本执行手动版本检查。这肯定会起作用,但如文章中所述,它添加了一个额外的 DB 命中来加载当前版本号。

    更好的解决方案,这似乎很明显,因为它实际上是该博客条目中描述和引用的“应用程序版本检查”文档中描述的内容。也就是说,使用 DTO 的版本对最初加载的实体执行版本检查。更具体地说,使用文章中的代码(文章代码的更改为粗体):

    公共无效更新(MyDTO dto){ // 选择项目。 var item = this.repository.SelectById(dto.Id); // 验证没有并发更改 if(item.Version != dto.Version) { 抛出新的 StaleObjectStateException(); } // 将值从 DTO 映射到模型。 item.Name = dto.Name; item.Version = dto.Version; // 调用更新 this.repository.Update(item); }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      相关资源
      最近更新 更多