2012-11-15 38 views

回答

2

在保存更改期間連接中斷時,您只會收到異常。在由於異常而未提交的事務中完成保存,並且EF不會將其當前更改設置爲已完成。你可以簡單地嘗試在特定發生異常,再次保存更改 - EF會嘗試打開一個新的連接,並執行相同的事務


爲前: 好,也許是這樣的:

public virtual void SubmitChanges() 
{ 
    if (DataContext != null) 
    {    
     try 
     { 
      DataContext.SubmitChanges(); 
     } 
     catch (Exception whenILostMyConnection) 
     { 
      SubmitChanges(); //recall the sumbitChanges 
     } 
    }    
} 
+1

好吧聽起來不錯,但是當我在ViewModel中並且它試圖執行LINQ查詢並因連接關閉或斷開而失敗時,我該怎麼辦?我已經註冊了一個事件,當連接狀態改變時觸發,並且當我鬆動連接到DB時,它似乎不會觸發。那麼我如何處理這個問題呢? – Willem

+0

我並不是很擅長給出「好」的設計模式解決方案,但我認爲如果你集中你的數據庫操作方法,這樣你就可以輕鬆地管理你的交易對數據庫,因爲,前創建一些適當的結果數據操縱器類,管理像SaveChanges,Commit等簡單操作。 – m4ngl3r

0

您可以在Windows Azure源代碼中看到答案。 Azure CRUD操作通常會將它們放入循環中,這些循環會重複執行多次相同的操作,從而導致某些特定的異常。但是你必須非常小心地處理重試的情況,因爲在大多數情況下它會讓你的應用程序變慢。

相關問題