我有一个有效实现缓存的表 - 我们把东西放进去,我们拿出东西。它有一个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并忽略它。
我可能没有考虑过可能产生的后果吗?
或者一些可以消除这个问题的替代方法?
答案 0 :(得分:0)
我认为这取决于您的业务逻辑。您可以假设数据库版本胜过您的。