在實體框架中,有幾個條件在數據庫級別處理,並作爲Context.SaveChanges()的異常傳遞迴EF。在一個循環中處理SaveChanges異常
如果您正在循環中創建新實體,您可以通過標準的「Try Catch」塊來處理異常,但是如何從SaveChanges()隊列中清除有問題的實體?
例如(移動的SaveChanges循環外沒有積極的效果,因此,其在此示出的環內):
while(i < 1000)
{
MyEntity Wibble = new MyEntity();
Wibble.Name = "Test " + i.ToString();
Context.AddToTests(Wibble);
Context.SaveChanges();
}
如果由於某種原因,已經存在一個維布勒這將導致插入物要在數據庫中的唯一約束失敗,我可以處理循環中的立即異常。
但是,它在下一次迭代中再次失敗,因爲有問題的Wibble實例仍然存在於SaveChanges隊列中 - 你應該如何處理?
如果我們正在創建一個重複的Wibble,那麼您可以事先檢查,但這會導致兩次往返數據庫。我不介意處理這個例外,我只是想讓這個問題知道,忽略這個記錄並繼續前進。
的思考?我做錯了嗎?
編輯:
我已經解決了眼前的問題,但只有當你在循環中做Context.SaveChanges()進行。如果你只是在循環結束之後調用SaveChanges()一次,我的解決方案不起作用 - 任何人都可以提出一種可行的替代方法嗎?
只需註釋:您應該將更改保存在循環外部,因此您只有一次訪問數據庫而不是千次。 – RHAD 2014-04-08 11:01:20