如何在Linq to entities中维护事务

本文关键字:维护 事务 entities to Linq | 更新日期: 2023-09-27 18:18:51

假设我同时在以下表中插入记录表1
表2

表3表4
表5

现在我想做的是,如果在表3中插入期间发生任何异常或错误,那么记录在此之前插入的内容(例如:在表1和表2中)必须回滚…

我如何管理这样的事务?

如何在Linq to entities中维护事务

这是实体框架4的默认行为

事务是隐式的。只要调用savechanges,任何错误都将触发回滚。

默认情况下,SaveChanges将在事务中执行(请参阅文档中的备注部分)

如果你想对事务有更多的控制,你可以在TransactionScope中包装你的savechanges块。SaveChanges将获取您的环境事务并使用该事务。

当你想要一个分布式事务(例如有多个上下文或者如果你使用WCF)时,这是很有用的。

正如您提到的,您使用不同的模型,您将在一个TransactionScope中使用两个ObjectContexts(并使用AcceptAllChanges的一些逻辑)

你的代码看起来像:

using (TransactionScope scope = new TransactionScope()) 
{ 
    //Do something with context1 
    //Do something with context2

    //Save Changes but don't discard yet 
    context1.SaveChanges(false); 
    //Save Changes but don't discard yet 
    context2.SaveChanges(false);

    //if we get here things are looking good. 
    scope.Complete(); 
    //If we get here it is save to accept all changes. 
    context1.AcceptAllChanges(); 
    context2.AcceptAllChanges();
 }