NHibernate乐观并发

时间:2009-07-21 15:45:55

标签: nhibernate concurrency

我正在调查NHibernate中的乐观并发性。我的场景与此处描述的场景非常相似:

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

您是否建议在此博客文章中使用建议的解决方案?

由于

1 个答案:

答案 0 :(得分:3)

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

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

    public void Update(MyDTO dto) {

        // Select the item.
        var item = this.repository.SelectById(dto.Id);


        // Verify there hasn't been a concurrent change
        if(item.Version != dto.Version)
        {
            throw new StaleObjectStateException();
        }


        // Map values from DTO to model.
        item.Name = dto.Name;
        item.Version = dto.Version;

        // Call update
        this.repository.Update(item);   

    }