2017-02-01 18 views
0

私は2データベース間のトランザクションを維持するためにTransactionScopeを使用しています。 2つの異なるDbContextを使用して2つのデータベースを作成しましたが、2番目にエラーが発生しています SaveChanges()メソッド呼び出し。私はMSDTC(Distributed Transaction Coordinator)&依存サービスを開始しましたが、まだエラーが発生しています。MSDTCエラーを修正できません

using (var transaction = new TransactionScope(TransactionScopeOption.Required)) 
     { 
      using (var employeeContext = new EmployeeDbContext()) 
      { 
       var newEmployee = new Employee { Id = 1, Name = "Pankaj" }; 
       employeeContext.Employee.Add(newEmployee); 
       using (var orderContext = new OrderDbContext()) 
       { 
        var newOrder = new Order { EmployeeId = 1, OrderId = 1, OrdreName = "Test", Amount = 100 }; 
        orderContext.Order.Add(newOrder); 

        employeeContext.SaveChanges(); 
        orderContext.SaveChanges();//getting error here 
        transaction.Complete(); 
       } 
      } 

     } 

Error

私はエラーが唯一の複数のDbContext

答えて

0

ドントしてくる上に、単一dbContextを使用しているとき、私はエラーを取得していないよあなたはまだ解決策を探しているかどうかを知ります - ただし:もしあなたがMS DTC設定を変更しようとしましたか? 「リモートクライアントを許可する」ことはできません。検索フィールドにdcomcnfgと入力すると、そのような設定を行うことができます(windows => Start)。その後、コンポーネントサービスが開きます。その後、コンポーネントサービス=>コンピュータ=>マイコンピュータ=>分散トランザクションコーディネータ=> [Your_DTC]に移動します。 DTCでは、(たとえば)セキュリティ設定を変更できるプロパティページを開くことができます。 「リモートクライアントを許可する」をチェックすると、おそらくあなたの問題が解決されます。 MSSQL Error 'The underlying provider failed on Open'How to run two Entity Framework Contexts inside TransactionScope without MSDTC?

をYou'veは言った:ときに私

私はエラーを取得していないよいない場合は、 - 私はお勧めの質問をStackOverflowのためにあります

...他のいくつかの設定を試してみてください複数のDbContextでしかエラーが発生しない上記の単一のdbContextを使用しています

この動作の理由は非常に明確です。TransactionScopeはトランザクションの処理に役立ちます。マイクロソフトは、デフォルトの2つのトランザクションマネージャを提供しています。「簡単な」トランザクションの場合はLTM(軽量トランザクションマネージャ)、分散トランザクションの場合はDTCです。トランザクションがいくつかの基準を満たす場合、MSは自動的にDTCにトランザクションをエスカレートします。 1つの基準は、2つの異なるデータベースに対するトランザクションアクセスです。したがって、問題の「回避策」を実行したい場合、可能であれば、1回のトランザクションで複数のデータベースへのアクセスを避けることができます。この変更の結果、取引はMS DTCにエスカレーションされなくなります。

+0

もう一つのstackoverflowに関する質問がありますが、それはあなたを助けるかもしれません。http://stackoverflow.com/questions/11451112/why-is-my-transactionscope-trying-to-use-msdtc-when-used-in-an-ef -code-first-app?rq = 1 – Joshit

+0

完璧な、私のために働く。私は上記の手順に従い、 "ネットワークサービス"アカウントを使用してMSDTCと従属サーバーを実行します。今私のトランザクションは正常に動作しています:)ありがとうalot @ Joshit –

+0

@ PankajRawat:素晴らしい!どういたしまして :) – Joshit

関連する問題