实体框架如何处理交易?

时间:2011-02-24 22:14:02

标签: c# transactions entity-framework-4

当您在上下文中调用SaveChanges时,Entity Framework是否使用事务?有没有办法完全关闭交易,或让某个实体选择退出交易?

AdventureWorksEntities db = new AdventureWorksEntities();

Product p1 = new Product();
// ...

Product p2 = new Product();
// set invalid data

db.Products.AddObject(p1);
db.Products.AddObject(p2);

// what happens when I call this - does it roll back everything?
// can i tell p2 not to participate in the transaction?
db.SaveChanges();

2 个答案:

答案 0 :(得分:7)

,如果尚未存在新事务,EF4将创建新事务。见

http://msdn.microsoft.com/en-us/library/bb896325.aspx

  

当您调用SaveChanges时,如果是   当前事务存在,实体   Framework使用此事务   针对数据源的操作。   否则,它会创建一个新的   该交易的交易。您可以   使用定义事务   EntityTransaction,Transaction或   的TransactionScope。

,无法从交易中豁免单个实体。

不确定您的第三个问题 - 关于您是否可以完全关闭交易,但我猜测不是基于上述摘录。

我知道这不是您想要听到的答案,但如果您希望P2保存,无论P1是否成功,您都需要将P2保存到不同的对象上下文中。

答案 1 :(得分:1)

关于关闭交易的最新问题 尝试使用Suppress TransactionScopeOption创建TransactionScope以完全关闭代码块的事务。请查看this thread以获取更多信息。