|
分類:[C#]
お疲れ様です。 VS2008, C#, SQLServer2005 で開発しています。
自動トランザクションの共有についてなのですが、現在以下のように root をルートに、 scope2 以降のトランザクションを入れ子にした一つの処理を作成しています。 入れ子の方の TransactionScopeOption を Required か RequiresNew にすると、「基本トランザクションマネージャとの通信が失敗しました」と エラーが表示されます。(MSDTCの環境が変更できないPCで動作することもあるので、環境に関してはスルーして頂けると助かります) が、 Suppress にすると問題なく動作します。 Suppress と Required は用途が違うだけで同じルートとの共有をしていると思うのですが、この動作の違いは何なのでしょうか? また、 Suppress はデータアクセス処理の場合使わない方が良い、と聞いたので、できれば Required の方で処理を行いたいと思っています。 どなたかご教授お願いいたします。
using(TransactionScope root = new TransactionScope(TransactionScopeOption.RequiresNew)) { 処理1(); 処理2();
root.Complete(); }
private void 処理1() { using(TransactionScope scope1 = new TransactionScope(TransactionScopeOption.Suppress)) { ... scope1.Cmplete(); } }
private void 処理2() { using(TransactionScope scope2 = new TransactionScope(TransactionScopeOption.Suppress)) { ... scope2.Complete(); }
|