由于各种原因,当我在DbContext
上调用SaveChanges
时,我需要能够执行几个自定义SQL UPDATE
命令。我希望这可以原子方式发生,因此常规的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。
围绕所有操作包装TransactionScope
。此类是.NET事务的常见抽象。 EF和SqlConnection
将自动登记。一定要寻找最佳实践,因为有一些陷阱,如意外触发分布式事务。