【发布时间】:2009-07-21 15:45:54
【问题描述】:
我正在研究 NHibernate 中的乐观并发。我有一个与这里描述的非常相似的场景:
您是否建议采用本博文中提出的解决方案?
谢谢
【问题讨论】:
我正在研究 NHibernate 中的乐观并发。我有一个与这里描述的非常相似的场景:
您是否建议采用本博文中提出的解决方案?
谢谢
【问题讨论】:
该博客建议使用拦截器从数据库中重新加载当前版本号,以便使用从 DTO 对象通过实体传入的版本执行手动版本检查。这肯定会起作用,但如文章中所述,它添加了一个额外的 DB 命中来加载当前版本号。
更好的解决方案,这似乎很明显,因为它实际上是该博客条目中描述和引用的“应用程序版本检查”文档中描述的内容。也就是说,使用 DTO 的版本对最初加载的实体执行版本检查。更具体地说,使用文章中的代码(文章代码的更改为粗体):
公共无效更新(MyDTO dto){ // 选择项目。 var item = this.repository.SelectById(dto.Id); // 验证没有并发更改 if(item.Version != dto.Version) { 抛出新的 StaleObjectStateException(); } // 将值从 DTO 映射到模型。 item.Name = dto.Name;【讨论】: