iBATIS.NETのトランザクションとSystem.Transactionsの連携

現在、他社と分担して.NETアプリの開発をしている。
このシステムはいろんな事情があって、先方はiBATS.NETを使い、当方はSystem.Transactionsを使うことになっている。ただし、先方開発分のモジュールから当方開発分のモジュールを呼び出す際にはトランザクションを共有したいという要件がある。
先方は「トランザクションのネストは出来ません」と言ってるのだが、「ほんまかいな」ということでiBATIS.NETのドキュメントとソースを眺めてみた。
4.4. Programming with iBATIS DataMapper: The .NET API」と「4.4. Programming with iBATIS DataMapper: The .NET API」をみると、iBATIS.NETは「BeginTransaction方式」と「自前TransactionScope方式」があるらしい。
「BeginTransaction方式」はIDbConnection.BeginTransactionを使ったもの。
「自前TransactionScope方式」はSystem.Transactionsとは異なり、実は内部でEnterpriseServicesを使っている。
と、いうことで「http://www.microsoft.com/japan/msdn/net/general/introsystemtransact.aspx」の記述とあわせて考えると、外側にあるiBATS.NETは「自前TransactionScope方式」を使ってトランザクションを張り、内側にあるSystem.TransactionsはTransactionScopeのコンストラクタの第一引数に「TransactionScopeOption.Required」、第三引数に「EnterpriseServicesInteropOption.Auto」か「EnterpriseServicesInteropOption.Full」を指定してあげればiBATS.NETのトランザクションを使ってくれそう。ただし、第二引数の「TransactionOptions.IsolationLevel」は外側トランザクションにあわせる必要があるのでContextUtil経由でカレントトランザクションのIsolationLevelを取得して設定することになる(timeoutはマシンのデフォルトを設定すればよさそう)。
実際試してみたところ、ちゃんと動作しているみたい。もちろんRequiresNewもOK。
先方の「トランザクションのネストは出来ません」というのは「4.4. Programming with iBATIS DataMapper: The .NET API」の末尾のNoteにある

This TransactionScope class does not support a nested transaction scope with different transaction options.

という文言から来たものかもしれない。
でも、これは「transaction options」が異なる(=IsolationLevelが異なる?)場合だけだよね?