web-dev-qa-db-ja.com

TransactionScopeを適切に使用する方法は?

私はいつもTransactionScopeを使いたいと思っていますが、それについて人々が何を見るのかわからないだけです。例を見てみましょう。

_using(TransactionScope tran = new TransactionScope()) {
    CallAMethodThatDoesSomeWork1();
    CallAMethodThatDoesSomeWork2();
    tran.Complete();
}
_

最も基本的な質問:「CallAMethodThatDoesSomeWork1()」が例外をスローした場合にアクションをロールバックする方法を知るために、「CallAMethodThatDoesSomeWork2()」を書く方法は?

34
Denis

呼び出すメソッド内のコードは、トランザクションを認識し、アクティブなトランザクションに参加する必要があります。これは、リソースマネージャーであるクラスを作成または使用することを意味します( 独自のリソースマネージャーの実装 を参照してください)。

これを行うには、 IEnlistmentNotification を実装し、トランザクションに参加します。トランザクションが完了すると、トランザクションマネージャーはそのインターフェイスで定義されているメソッドを呼び出して、コードで作業を実行/取り消すことができます。

22
Trevor Pilley