【发布时间】:2012-11-03 08:02:26
【问题描述】:
由于各种原因,当我在 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 总是创建一个新事务,即使我已经在数据上下文的连接上创建了一个?
有什么方法可以实现我想要的吗?
我使用的是 Entity Framework 5.0 Code First。
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
标签: c# entity-framework transactions dapper savechanges