0

在以下链接上提出的问题也有一个很好的答案,但我的问题在那之后开始了。

使用事务或 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 的行之前一切正常,但是在 // LABEL 2 行上,它无法显示“底层提供程序在打开时失败”。

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

有人可以帮我吗?

4

1 回答 1

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

于 2013-01-08T20:19:03.573 回答