2017-06-13 81 views
0

我知道我們可以通過以下命令訪問OpenAccessContext中的新/修改/刪除實體。在異常情況下獲取OpenAccessContext中的修改實體

dbContext.GetChanges().GetInserts<object>() dbContext.GetChanges().GetUpdates<object>() dbContext.GetChanges().GetDeletes<object>()

如果execption occures因任何理由而perfoming的SaveChanges(),我需要登錄的實體,但他們在例外的情況下,被清除。

有沒有辦法在異常情況下將實體從OpenAccessContext中取出?

回答

1

您可以覆蓋SaveChanges方法是這樣的:

public override void SaveChanges() 
    { 
    ContextChanges cruds = this.GetChanges; 
    IList<object> inserts = cruds.GetInserts<object>(); 
    IList<object> updates = cruds.GetUpdates<object>(); 
    IList<object> deletes = cruds.GetDeletes<object>(); 

    try { 
     base.SaveChanges(ConcurrencyConflictsProcessingMode.AggregateAll); 
    } catch (Exception ex) { 
     // Retry or in your case log... 
     this.Refresh(RefreshMode.PreserveChanges, updates); 
     this.Delete(deletes); 
     this.Add(inserts); 

     Thread.Sleep(1000); 
     base.SaveChanges(); 
    } finally { 
     this.FlushChanges(true); 
    } 
    } 

當調用SaveChanges失敗,變化仍然可以訪問。您也可以在處理異常時記錄異常。

相關問題