TransactionScopeを使ったEscalation

もし、.NET2.0でEscalationとやらが、僕の理解している様に動作するなら、ぶら下がってるリソースが、 単一なら、1フェーズコミット、複数あるなら2フェーズコミットになる筈です。

.NET2.0で新しく追加されたSystem.Transactions 名前空間を使ったトランザクション管理ですが、Escalationに関しては
Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center
Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center
http://www.microsoft.com/japan/msdn/net/general/introsystemtransact.asp#introsystemtran_topic4
にある記述をみるとTransactionScopeを使えば必要があれば自動的にLTMからOleTxへ切り替わり、プログラマは対象リソースの多重度を意識しないで単一のプログラミングモデルを使用できる機能をなっています。

しかし、書籍案内|技術評論社を見た限りでは、現在のところLTMからOleTxへの自動昇格に対応しているのはリソースマネージャがIPromotableSinglePhaseNotificationの実装を提供しているSQLServer2005と2.0のデータプロバイダの組み合わせのみでその場合でも
行のバージョン管理に基づく分離レベルの使用 | Microsoft Docs
トランザクション分離レベルの調整 | Microsoft Docs
IsolationLevel Enum (System.Transactions) | Microsoft Docs
あたりを見るとSnapshot分離レベルの昇格はサポートされていないようだ。

自動昇格をサポートしないリソースマネージャとTransactionScopeを組み合わせた場合はLTMは使われず常にOleTxが利用されるため1.x環境でSystem.EnterpriseServicesを使った場合と同様のオーバーヘッドが掛かるって事かな?

今の所、S2Container.NETで全面的にTransactionScopeを活用した対応を行ってもメリットが引き出せる環境は限定的になるので、とりあえずMSDTCが動作するように対応するだけで良い気もする。