0

私はこれについて多くのことを読んできましたが、一部のドキュメントは現実に関連していないようです。潜在的な原因のいくつかはここで適切ですが、それらは 2008 年以前にのみ関連しています。

トランザクション スコープを定義します。トランザクション スコープ内で (異なるメソッド呼び出しで) さまざまな EF コンテキストを使用しますが、そのうちの 1 つを除いてすべてがデータ読み取り専用です。Context の最終的な使用法は、いくつかの新しいオブジェクトを作成してコンテキストに追加し、次に呼び出すことです。

context.SaveChanges()

IIS は 1 つのサーバーで実行されています。DB (Sql2012) は別のサーバー (WinServer 2012) で実行されています。

このコードを実行すると、次のエラーが表示されます。

分散トランザクション マネージャー (MSDTC) のネットワーク アクセスが無効になっています。コンポーネント サービス管理ツールを使用して、MSDTC のセキュリティ構成でネットワーク アクセスに対して DTC を有効にしてください。

明らかに、IIS マシンで DTC を有効にすると、これはなくなります。しかし、なぜ必要なのですか?

これ:

http://msdn.microsoft.com/en-us/library/ms229978.aspx

状態:

• 単一フェーズの通知をサポートしない永続リソースが少なくとも 1 つ、トランザクションに登録されている。• 単一フェーズの通知をサポートする少なくとも 2 つの永続的なリソースがトランザクションに登録されている

私が理解しているのは、ここでは当てはまりません。

4

1 に答える 1

0

Ok。(MS docoによると)これが起こっているべきかどうかは完全にはわかりませんが、その理由と解決策はわかりました.

ASPNet メンバーシップ プロバイダーを使用しており、web.config に 2 つの接続文字列があります。それらが同じDBを指しているという事実は、それらが同じ「永続的なリソース」と見なされるのに十分だと思いました。

ただし、メンバーシップ接続文字列にも次のものが含まれていることがわかりました。

Connection Timeout=60;App=EntityFramework

一方、Entity Framework 接続文字列はそうではありませんでした。

これらの値を同じ接続文字列に設定すると、トランザクションは MSDTC にエスカレートされません。

于 2012-10-05T00:51:31.690 に答える