問題:
a .NETTransactionScope
を使用したアプリケーションは、MSDTCエスカレーションに関する一貫性のない動作を示します。 一部の開発者マシンでは、トランザクションはMicrosoft分散トランザクションコーディネーター(MSDTC)に自動的にエスカレートし、MSDTCを有効にする必要があります。他の場合は、同じコードがMSDTCなしで正しく機能します。
コンテキスト:
TransactionScope
トランザクション内でデータアクセスを管理します
TransactionScope
SQL Serverバージョンの不一致(2005対2008)に関する最初の仮定が正しくないことが証明されました。 根本的な原因は、SQL Server 2005の制限にあります。オープニングシーケンスに関係なく、単一の内の複数の接続をサポートしません。 2番目の接続を試みると、エスカレーションが強制されます。 逆に、SQL Server 2008は、同時に開いていない場合、内で複数の接続を許可します。 潜在的に接続プーリングとデータアクセスレイヤー(
など)を介して、潜在的にSQL Server 2005でエスカレーションをトリガーする可能性があります。TransactionScope
解決策:TransactionScope
SqlTableAdapter
SQL Server 2005の場合、トランザクション全体にグローバルにスコープが刻まれた単一のオープン接続を維持すると、MSDTCのエスカレーションが防止されます。 ただし、これは効率的な接続管理(必要に応じて開閉)を提唱するベストプラクティスから逸脱しています。 SQL Server 2008以降へのアップグレードは、この制限を回避し、ベストプラクティスを維持するための推奨ソリューションです。
以上がTransactionScope が一部のマシンでは MSDTC にエスカレーションされ、他のマシンではエスカレーションされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。