2013-11-21 32 views
0

我需要在不同的時間在實體上下文中保存多個表。如果其中一個保存更改方法運行,但另一個保存更改方法不同的表失敗,我試圖恢復數據庫回到它的原始狀態。如何恢復實體的保存更改dbcontext

爲了實現這一點,我試圖創建兩個實體上下文,見下文。第一個實體將在需要時更改並在不同的表上調用SaveChanges方法。但是,如果發生錯誤,我嘗試使用第二個實體上下文來覆蓋到目前爲止發生的對數據庫所做的任何更改。

有沒有辦法用我在程序開始時創建的「origianlEntityValues」上下文覆蓋數據庫值?

下面的代碼樣本,希望能解釋更清楚

我實例化兩個Entity背景在我的程序的開始(他們的DbContext繼承)。一個我會做出改變。另外我試圖萬一使用中發生錯誤恢復的變更

SystemEntities entity = new SystemEntities(); 
SystemEntities originalEntityValues = new SystemEntities(); 

在整個程序中,我需要獨立,因爲我需要讓自己生成的ID值,並在其他實體類使用它們保存表內,以然後我去打電話節省的變化,所以我把這樣的代碼

entity.Contact.SaveChanges(); 
.... 
entity.Transact.SaveChanges(); 

如果首先保存更改運行正常,但第二個原因,我試圖用 「originalEntityValues」覆蓋以前的錯誤保存更改調用,以便在出現意外錯誤時程序啓動時,我的數據庫具有相同的值河

catch{ 
    // refresh the database with the originalEntityValues context? 
} 

任何幫助,非常感謝提前。

回答

1

您是否嘗試過使用TransactionScope類將其包裝爲1大transaction?出錯時,數據不會被寫入,直到調用TransactionScope.Complete

+0

我想我仍然會遇到一個問題,因爲我需要將聯繫人表保存到數據庫,以便它可以爲其生成一個Id(主鍵),然後將其用於事務處理記錄中。 – user2945722

+0

沒關係只是做了一些測試和tranactionscope完美的作品。非常感謝!會upvote你,但沒有足夠的代表 – user2945722