2012-12-10 59 views
0

我正在使用EF codefirst在asp.net mvc上工作。我正試圖一次更新記錄列表。像,如何在ef codefirst模型中回滾以前的更改

foreach(var pat in listpats) 
{ 
context.Entry<Patient>(pat).state=EntityState.Modified; 
context.savechanges(); 
} 

,對我的工作的罰款。現在假設如果listpats包含10個項目,如果我在更新時在第7個項目中出現異常。它會保存前6項。但如果在更新時沒有發生錯誤,我想一次保存所有記錄。如果發生任何錯誤意味着我應該回滾所有以前的更改。所以如何使用EF代碼第一個模型來實現這一點。請指導我。

回答

0

你應該調用外的foreach的SaveChanges():

foreach(var pat in listpats) 
{ 
    context.Entry<Patient>(pat).state=EntityState.Modified; 
} 

context.SaveChanges(); 

如果出現異常,一切都將被回滾

0

如果你已經在其他一些代碼,然後他們的國家將修改後的實體通過這種方式(在相同的上下文中),而不必使用foreach循環和context.Entry(pat).state = EntityState.Modified進行顯式更改。

所以退一步說,修改所有患者實體後,一次調用context.SaveChanges()將自動回滾出錯。

Soooo總結,改變所有患者實體,然後調用context.SaveChanges()這將使EF傳播所有具有修改狀態(修改實體時發生狀態更改)的實體到數據庫,上下文.SaveChanges()將處理這種與回滾有關的簡單情況。

P.S.你的問題讓我想知道你是否在不同的環境中改變了病人,這就是爲什麼你要手動改變當前情境的狀態。