在下面的链接上提出的问题也有很好的答案,但我的问题在此之后开始。
Using Transactions or SaveChanges(false) and 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的行之前,情况正常 但是在线// LABEL 2它没有说 “底层提供商在Open上失败了。”
注意: - 请注意Context1,Context2是同一类型的2个不同实例。
有人可以帮我吗?
答案 0 :(得分:0)
这个答案可能解释了您的问题的原因:
https://stackoverflow.com/a/3081776/655625
您可能需要在context1.SaveChanges(false);
行之后重新打开连接。
如:
context2.Database.Connection.Open(); //before the second SaveChanges(false)
但是,仔细阅读,你会发现你正在以这种方式进行分布式事务,这个其他答案(从第一个链接)显示了一个替代(更精细)以避免分布式事务。 https://stackoverflow.com/a/794785/655625