4

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

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

.NET 4.5,EntityFramework.dll 版本 5。

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

4

1 回答 1

1

经过多次 PITA 努力挖掘 EF 的东西。我发现对它进行适当事务控制的唯一方法是最好使用 ObjectContext,而不是 DbContext。

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

这暗示了 ObjectContext

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

链接:ObjectContext 在 .NET 4.5 中是否已弃用?

通过将其更改为默认值,您将获得 ObjectContext 代码库生成。

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

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

于 2013-07-24T09:40:31.423 回答