他の人のガイドを引用すると:実際の開発作業では、イベントを実行してから別のインターフェースを呼び出してデータを挿入します。処理ロジックに例外がある場合、以前に挿入されたデータはジャンクデータになります。私たちが望むのは、メソッド全体をトランザクションとして定義できることであり、TransactionScopeクラスはトランザクション自体とやり取りしなくて済むシンプルなメソッドを提供します。コードブロックをトランザクションに参加しているとマークするために。 TransactionScopeオブジェクトはトランザクションを作成し、トランザクションクラスのCurrentプロパティにトランザクションを設定します。 1. トランザクションスコープの利点1. 使いやすくなる。 TransactionScopeは暗黙のトランザクションを実装できるため、トランザクションを考慮しずにデータアクセス層のコードを書く一方で、ビジネス層でトランザクションを制御できます。2. クロスデータベースやMSMQなどの分散トランザクションの実装が可能です。 2. トランザクションスコープの欠点1. コストパフォーマンスは高くない。 例えば、「Scope」ではライブラリのトランザクションのみを制御できます。 「TransactionScope」を使うのは少し無駄です。2. 通常、「TransactionScope」を使う限り、MSDTCの設定、ファイアウォールの設置、ポート139の開放が必要です。 このポートは変更できません 3. 分散トランザクションを使う必要がある場合は、よく考える必要があります1. この操作はトランザクションに含めていなければならないか? このステップが完了しなかったり失敗した場合、取引全体をロールバックする価値はありますか? 洗練された補償やフォールトトレランス対策はないのでしょうか?2. 分散トランザクションには何ポイントが関わるか? リアルタイム操作の連続が大量に必要ですか? 通知操作でポイントを効率化できないのですか?3. 分散トランザクションを開始した後、トランザクションに依存しない操作を行いましたか?これらの操作はトランザクションとは無関係でしたが。 (例:データの読み取り、計算、ユーザーのメッセージ返答待ち、他のモジュールの呼び出し返り待ちなど)4. 取引中に読書操作をいくつか含めていなかったよね? これはトランザクションに選択操作を導入した際に犯しやすいミスです。5. すべての操作が完了した後に、いくつかの操作を実行できます。 この種の操作には明らかな通知特性があります。 通知オペレーターは「通知を出します。必ず届くことを保証します」と言います。この通知を受け取り、処理されるようにしてください。ただし、私が通知した直後に対応する必要はありません。 この操作は明らかに別のタスクで行うことができます。 4. 分散トランザクションを使用する際は以下の点に注意してください1: トランザクションに参加するマシンが分散トランザクションサポートを有効にしていることを必ず確認してください。2: マシンにファイアウォールがオンになっている場合、MSDTCプロセスを例外として設定する必要があります。3: トランザクションに参加するマシンはドメインを越えることができません(もしドメインを越えている場合、Microsoftは現時点で正確な解決策を持っていません);4: 分散トランザクションは複数のデータベースがある場合のみ使用してください。同じデータベースの場合はSqlTransactionを使うのが最適です。