下面的问题也有一个很好的答案,但是我的问题在那之后开始了。
使用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