1

私は異なるデータベースの2つの異なるエンティティを持っています。 私のプロセスでは、両方のデータベースを操作する必要があり、プロセス全体がトランザクションでなければなりません。 私はTransactionScopeを試しました。単一のエンティティでうまく動作します。Entity Framework 4の2つの異なるエンティティのトランザクション

var entity1 = clsProject.GetEntity1(); 
var entity2 = clsProject.GetEntity2(); 
System.Transactions.TransactionScope tranScope = new System.Transactions.TransactionScope(); 
entity1.Connection.Open(); 
entity2.Connection.Open(); 

//Do operations 
entity1.SaveChanges(false); 
entity2.SaveChanges(false); 
tranScope.Complete(); 
entity1.AcceptAllChanges(); 
entity2.AcceptAllChanges(); 

ただし、次の行でエラーが発生します。entity2.Connection.Open(); エラーメッセージ:基になるプロバイダがOpenで失敗しました。 内部例外:パートナートランザクションマネージャは、リモート/ネットワークトランザクションのサポートを無効にしています。 (例外:HRESULT:0x8004D025)

あなたのアイデアをお寄せください。事前に

おかげで、

ネアシュGoradara

答えて

3

2番目のデータベースを使用して、両方のサーバでDistributed Transaction Coordinatorをオンにする必要があり、別のサーバー上にある、とのTransactionScopeが動作する場合。

+0

既にオンになっていますが、機能しません。同じエラーです。 –

+0

テストするには、セキュリティタブで「認証不要」を試してください。 –

+0

トランザクションスコープをusingステートメントにラップします。これも試してみてください。 –

1

前述のとおり、Distributed Transaction Coordinatorを有効にする必要がありますが、着信接続と発信接続のどちらも許可するように設定する必要があります。

さらに、テスト目的で、認証を必要としないように設定できます。

これらの設定はすべて、「コンポーネントサービス」MMCの「分散トランザクションコーディネータ」の「セキュリティ」タブで利用できます。ノートのDistributed Transaction Coordinator

もうひとつ:マイクロソフトはDTCPingとして知られているDTCテストツールを持っている

このすべてが「ユージンS.」が提供するリンクを見つけることができます。このツールをトランザクションに関係する両方のサーバーに展開し、各サーバー上で同時にプログラムを実行し、「トランザクションパートナー」の名前(他のコンピューターの名前のみ)をエーテル化することができます。各サーバーの実行ボタンを押すと、ツールがあなたのためにいくつかのテストを実行します - かなり良いエラー報告もあります。

関連する問題