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並忽略它。
對此我可能沒有考慮過任何可能的後果嗎?
或者一些可以消除問題的替代方法?