0

次のリンクで尋ねられた質問は、その下でも素晴らしい答えがありますが、私の問題はその後に始まります。

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でマークされた行までは正常に機能しますが、行// LABEL 2では、「基になるプロバイダーがOpenで失敗しました」と表示されません。

注:-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 に答える