3
我有一个有效实现缓存的表格 - 我们把东西放进去,我们把东西拿出来。它有一个last_accessed字段,指示它何时被插入或读取,并且它有一个max_age字段,指示保留记录的时间。可以忽略DbUpdateConcurrencyException吗?
我们想清除旧记录,而不是让它们累积。对我来说,最简单的处理方法就是在每次访问记录时调用清除例程。
这是很简单的事,在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并忽略它。
对此我可能没有考虑过任何可能的后果吗?
或者一些可以消除问题的替代方法?