2

(Entity Framework を使用して) db に保存し、1 回の保存でドキュメントを SharePoint に保存するアプリがあります。TransactionScope で MSDTC を使用しようとしています。

私の EF 挿入ロジックの一部には、外部キーのリストをデータ層に渡すことが含まれます。レイヤーは、データベースから「外部キー」オブジェクトを取得し、それをプライマリ オブジェクトに追加します。奇妙なことに、これは最初の外部キーの項目では正しく機能しますが、2 番目の項目では次のメッセージで失敗します。

System.Data.EntityException: 基になるプロバイダーが Open で失敗しました。---> System.Transactions.TransactionManagerCommunicationException: 分散トランザクション マネージャー (MSDTC) のネットワーク アクセスが無効になっています。コンポーネント サービス管理ツールを使用して、MSDTC のセキュリティ構成でネットワーク アクセスに対して DTC を有効にしてください。

MSDTC は有効で、最初のパス スルーでは機能しますが、2 番目のパス スルーでは機能しません。複数の選択呼び出しを行っているときに、コンテキストが何らかの形で混乱していると思いますか?

ここに私の論理があります:

//Create new order

foreach(int lineItemId in lineItems)
{
   //Retrieve the LineItem object from db
   //Add the LineItem object to the Order
}

//Save using EF

おそらく、データベースからオブジェクトを取得するべきではありませんか? EF でリレーションシップを参照する簡単な方法がありませんか?

4

2 に答える 2

6

DB サーバー、Sharepoint サーバー、およびコードを実行しているマシンで DTC が実行され、ネットワーク アクセスが有効になっている必要があります (Distributed Transaction Coordinatorコンポーネント サービス スナップインのノードで [プロパティ] を右クリックし、Network DTC Accessチェックされていることを確認します)。Allow Remote Clientsインバウンドとアウトバウンドの通信が各マシンでチェックされます (これらの一部を削除できる場合もありますが、最初に機能させる必要があります)。

最初の呼び出しは、ローカル DTC とのみ通信しているため機能します。リモート DTC で tx を登録しようとするとすぐに失敗します。

于 2009-09-25T03:14:29.717 に答える