2012-07-02 43 views
1

我需要更新多個更新語句,但都應該對原子性工作,即更新全有或全無。許多更新語句在實體框架

在互聯網和其他SO問題我已經找到了如何使用交易,但我沒有找到任何人說,要在一個交易中更新多個語句。 見下面三個更新語句,目前還不能下交易

/// this are my update calls. 
var report = reportRepository.Update(reportModel); 
var book = bookRepository.Update(bookModel); 
var mobile = mobileRepository.Update(mobileModel); 

// each Update method for all repository will looks like 
public returnModel Update(someModel model) 
{ 
    // assign values from model to entity 
    Context.ObjectStateManager.ChangeObjectState(entity,System.Data.EntityState.Modified) 
    Context.SaveChanges(); 
} 

回答

4

運行時,您可以在包裝更新一個TransactionScope

using (TransactionScope transaction = new TransactionScope()) 
{ 
    var report = reportRepository.Update(reportModel); 
    var book = bookRepository.Update(bookModel); 
    var mobile = mobileRepository.Update(mobileModel); 
    ... 
    transaction.Complete(); 
} 
+0

是我說的這種方式。 .. –

1

由於Darin提到使用事務範圍,或者我的首選方法是讓您的存儲庫屬於IUnitOfWork接口。調用更新只需將狀態設置爲已修改狀態,並且SaveChanges會在您的存儲庫之外發生,以便一次保存所有更改。 這應該在一個事務中自動發生。

所以你調用所有更新,然後unitOfWork.SaveChanges其中工作類的自定義單元包含對上下文的參照和執行的方法定義IUnitOfWork稱爲保存()

+0

謝謝,你說的是100%正確的,但在我目前的實施中,這不適合。 – Meson