2009-04-22 10 views
7

これはNested Database transactions in C#に関連しています。私はトランザクションで撮りたいコレクション内のSqlConnection.BeginTransactionとTransactionScopeを混在させることはできますか?

オブジェクトがSqlConnection.BeginTransactionメソッドを使用して、独自のトランザクションを実装します。

このpostを読んだ後、私はあまりにもかされていないものを混在させることができるかどうかわかりません。 私はSQL Server 2005を使用しており、各オブジェクトは静的構成クラスの接続の詳細を使用しています。

誰もこの経験がありますか?ここで

は、サンプルコードは次のとおりです。

using(TransactionScope scope = new TransactionScope()) 
{ 
    for (int i=0; i<=1000....) 
    { 
    SqlConnection con = new SqlConnection() 
    SqlCommand cmd = new SqlCommand("delete from ...", con); 

    try { 
     con.Open(); 
     DbTransaction t = con.BeginTransaction(); 
     cmd.ExecuteNonQuery(); 
     ... 
     cmd.CommandText = .... ; 
     cmd.ExecuteNonQuery(); 
     t.Commit ... 
    } 
    catch { 
     t.Rollback ... 
    } 
    con.Close() 
    } 
} 

Thxを

答えて

5

両方のマシン上で動作するようにMSDTCを設定するために時間を過ごした後、私は最終的に私は、コードをテストすることができポイントになりました。

上記の問題は「レガシー」取引システム場合、またはトランザクションを取り除くことができないので、ソースコードへのアクセス権を持っていない人に便利かもしれ(1つのデータベースに)動作するように表示されます

コードの一部がローカライズされていないか、私の場合のように、本番環境で安定していると判明した複雑なコードをあまりにも混乱させたくないのですが、ネストしたトランザクションを導入する必要があります...

あなたが別の経験を持っているかどうか教えてください。

+0

あなたは答えをこの質問の答えにする必要があります - それは許されます! – Fenton

+1

私のケースでは、私たちの開発マシンでは、各テストおよびテストクラスについて考えることなく複雑なデータベース操作を実現し、すべて理論的にロールバックさせるために、「ユニット」テストがTransactionScopeにラップされています。同時に、本番サーバーでのMS DTCの使用を必ずしも望んでいないので、通常のトランザクションでいくつかの複合エンティティフレームワークのエンティティ操作をラップして、失敗した場合でも操作全体がロールバックできるようにしたい...理想的には、TransactionScopeは引き続き動作する必要があります。 – bambams

関連する問題