私はいつもTransactionScope
を使いたいと思っていますが、それについて人々が何を見るのかわからないだけです。例を見てみましょう。
_using(TransactionScope tran = new TransactionScope()) {
CallAMethodThatDoesSomeWork1();
CallAMethodThatDoesSomeWork2();
tran.Complete();
}
_
最も基本的な質問:「CallAMethodThatDoesSomeWork1()
」が例外をスローした場合にアクションをロールバックする方法を知るために、「CallAMethodThatDoesSomeWork2()
」を書く方法は?
呼び出すメソッド内のコードは、トランザクションを認識し、アクティブなトランザクションに参加する必要があります。これは、リソースマネージャーであるクラスを作成または使用することを意味します( 独自のリソースマネージャーの実装 を参照してください)。
これを行うには、 IEnlistmentNotification を実装し、トランザクションに参加します。トランザクションが完了すると、トランザクションマネージャーはそのインターフェイスで定義されているメソッドを呼び出して、コードで作業を実行/取り消すことができます。