实体框架SaveChanges(False)在使用TransactionScope时失败



下面的问题也有一个很好的答案,但是我的问题在那之后开始了。

使用Transactions或SaveChanges(false)和AcceptAllChanges()?

我尝试了按照我的要求给出的代码如下


MyEntities context1 = new MyEntities();
...
...
 // some code for changing the table data in Context 1.
...
MyEntities context1 = new MyEntities();
using (TransactionScope scope = new TransactionScope())
{
    context1.SaveChanges(false);   // LABEL 1
    context2.SaveChanges(false);   // LABEL 2
    scope.Complete();             // LABEL 3
    context1.AcceptAllChanges();  // LABEL 4
    context2.AcceptAllChanges();  // LABEL 5
}

在//LABEL 1之前一切正常然而,在line//LABEL 2中,它失败了"底层提供商在Open上失败。"

注意:-请注意,Context1, Context2是2个相同类型的不同实例。

有谁能帮我一下吗?

这个答案可能解释了你的问题的原因:https://stackoverflow.com/a/3081776/655625您可能需要在context1.SaveChanges(false);线之后重新打开连接。例如:

context2.Database.Connection.Open(); //before the second SaveChanges(false)

然而,仔细阅读,你会发现你正在这样做一个分布式事务,另一个答案(从第一个链接)显示了一个替代(更详细)来避免分布式事务。https://stackoverflow.com/a/794785/655625

相关内容

  • 没有找到相关文章

最新更新