2015-03-31 107 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

我認爲這取決於您的業務邏輯。你可以假設數據庫版本勝過你的。

相關問題