2015-03-31 115 views
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并忽略它。

对此我可能没有考虑过任何可能的后果吗?

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

回答

0

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

相关问题