0

Enterprise Library Data Access Application Block と組み合わせて、トランザクション処理に System.Transactions と Transaction スコープを使用しています。

場合によっては、トランザクション内で Database クラスの個別のインスタンスを使用しています。ただし、接続は同じデータベースです。

この場合、アプリケーション ブロックが同じ接続を再利用し、分散トランザクションにまたがらないかどうか疑問に思っていますか?

4

2 に答える 2

3

一言で言えば、MSDNにはあなたの答えがあります:

一方、エンタープライズ ライブラリは通常、要求ごとに接続を開いたり閉じたりします。このアプローチは、TransactionScope クラスの動作と互換性がありません。複数の接続がある場合、TransactionScope クラスはトランザクションを分散トランザクションと見なします。分散型トランザクションは、ローカル トランザクションと比較して、パフォーマンスとリソースのオーバーヘッドが大きくなります。」(MSDN)

「これを回避するために、ExecuteDataSet などの Database クラス メソッドは、TransactionScope インスタンスがアクティブであることを認識し、このトランザクションにデータベース呼び出しを登録します。TransactionScope インスタンスを使用した結果としてトランザクションが現在アクティブである場合、Database クラス メソッドは、単一の接続。」(MSDN)

使用しているデータベースについては言及していません。私が使用していた Oracle 10g クライアントでは、TransactionScope を使用すると、常に分散トランザクションが発生する場合がありました。この問題は、今後のリリースで対処されるようです。

Transaction Statisticsの下を見ると、答えを確認できます。

于 2009-05-26T13:17:26.243 に答える
0

TransactionScope非常に奇妙な獣です。私の経験では、別の接続 (同じ DB への接続であっても) が開かれるとすぐに、DB トランザクションは分散トランザクションに昇格されます。

于 2009-05-26T13:10:06.710 に答える