可以忽略DbUpdateConcurrencyException吗?

时间:2015-03-31 15:54:14

标签: sql-server entity-framework concurrency

我有一个有效实现缓存的表 - 我们把东西放进去,我们拿出东西。它有一个last_accessed字段,指示它何时被插入或读取,并且它有一个max_age字段,指示保留记录的时间。

我们希望清除旧记录,而不是让它们累积。在我看来,每次我们访问记录时,最简单的方法就是调用清除程序。

这很简单,在EF:

var oldCacheItems =
    this.xxDbContext.XXtokencaches.Where(
        t => EntityFunctions.AddMinutes(t.lastAccessed, t.expirationMinutes) < DateTime.Now);

    this.xxDbContext.XXtokencaches.RemoveRange(oldCacheItems);
    this.xxDbContext.SaveChanges();

单独工作正常。但是当我有多个客户端运行时,我偶尔会得到DbUpdateConcurrencyExceptions:

System.Data.Entity.Infrastructure.DbUpdateConcurrencyException was unhandled by user code
HResult=-2146233087 
Message=Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.
Source=EntityFramework

浏览,我看到很多关于EF中并发问题的讨论。但在这种情况下,我不确定是否重要。从本质上讲,这个特殊的错误是EF抱怨它不能删除记录,因为其他人已经删除了它们。

所以我考虑简单地捕获DbUpdateConcurrencyException并忽略它。

我可能没有考虑过可能产生的后果吗?

或者一些可以消除这个问题的替代方法?

1 个答案:

答案 0 :(得分:0)

我认为这取决于您的业务逻辑。您可以假设数据库版本胜过您的。