DbContext.SaveChanges()没有任何自动事务处理

时间:2013-07-18 08:06:13

标签: entity-framework

有没有办法在不调用内部自动事务处理的情况下执行DbContext.SaveChanges()?

我正在努力处理事务(DbTransaction),但是当我调用它的Commit时,我收到错误“SqlConnection不支持并行事务” 我相信这是由于SaveChanges正在做自己的内部交易工作,我想压制它。

.NET 4.5,EntityFramework.dll ver 5。

谷歌搜索显示的方法很少,但代码不兼容。 一些显示SaveChanges可以接受一个布尔值,它不在此版本中。然后调用AcceptAllChanges()哪个方法也不存在。 虽然有些人正在使用System.Transaction.TransactionScope,但它与此System.Data.Common.DbTransaction不同。

1 个答案:

答案 0 :(得分:1)

许多PITA努力挖掘EF之后的事情。我发现对它进行适当的事务控制的唯一方法是使用ObjectContext而不是DbContext。

http://sqlanywhere-forum.sap.com/questions/11320/entity-framework-savechanges-closes-connection

这暗示了ObjectContext

如果您的EDMX代码生成策略设置为None,则会生成DbContext代码库。

link:Is ObjectContext deprecated in .NET 4.5?

通过将其更改为Default,您将获得ObjectContext代码库gen。

到目前为止,我发现它们的差异,使用DbContext,每当你调用它的SaveChanges()时,它将自动关闭底层连接,你的下一个db任务将有一个新的连接,这基本上打破了事务控制我寻求的东西。 您需要在没有conx关闭的情况下运行整个数据库任务,或者在事务中重新创建。

通过使用ObjectContext,如果我在它之前正确设置了事务和连接代码,SaveChanges()将不会自动关闭连接。

相关问题