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

时间:2013-01-08 19:47:17

标签: entity-framework transactionscope savechanges

在下面的链接上提出的问题也有很好的答案,但我的问题在此之后开始。

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个不同实例。

有人可以帮我吗?

1 个答案:

答案 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