当您在上下文中调用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();
答案 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以获取更多信息。