由于各种原因,当我在UPDATE
上调用SaveChanges
时,我需要能够执行多个自定义SQL DbContext
命令。我希望这可以原子方式发生,因此常规SaveChanges
和SQL都可以成功,或者两者都不成功。
我不知道怎么做到这一点。到目前为止我所尝试的是这个以及各种变化:
这里的错误是(在ExecuteSqlCommand
电话上):
当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery要求命令具有事务。
好的,够公平的。 ExecuteSqlCommand
没有接受事务的重载。所以,我安装了Dapper软件包并用这个Dapper调用替换了违规行,我传递了交易:
this.Database.Connection
.Execute("insert into Tests (Foo, Bar) values ('test', 2)",
transaction: tran);
但现在错误发生在base.SaveChanges()
上,它给了我以下内容:
SqlConnection不支持并行事务。
显然SaveChanges
总是创建一个新的事务,即使我已经在datacontext的连接上创建了一个呢?
我有什么办法可以完成我想要的任务吗?
我正在使用Entity Framework 5.0 Code First。
答案 0 :(得分:3)
围绕所有操作包裹TransactionScope
。此类是.NET事务的常见抽象。 EF和SqlConnection
将自动登记。一定要寻找最佳实践,因为有一些陷阱,比如意外触发分布式事务。