2012-07-02 40 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