モルモルしている

最近はテスト業務ばっかりで書くことがない

TransactionScopeを使うときの注意事項

Transactionはかけるべき、と思っていたけど今までは自分用のツールしか作ってなかったのでまあいいか、してた。
けどさすがに業務用アプリを作るのにそれが許されるわけはなくって。

調べていきついたTransactionScopeが便利で、それを使うことにしたんだけど前記事のTimeout以外にもいくつか引っかかったから覚え書き。

  • System.Transactions.dll を参照追加する。
  • INSERT、UPDATE、DELETE、TRUNCATEなどはまるっとロールバックしてくれる。それだけでなくてDROP TABLEやCREATE TABLEもロールバックしてくれる。


usingで囲ってCompleteしなければ勝手にロールバックしてくれるというのは結構便利で、テストコード書くときに

using(var tran = new TransactionScope())
{
 テストコード;
}

っていうふうにusingで囲ってCompleteなしにしておくと、テスト終了時に勝手にDBへ更新した内容が破棄されるのです。
DBに対して検証環境整えたり処理で変更をかけてもテスト終了時に全部破棄されるから初期化とか必要なくて本当に便利。
最終的にDBと連携する部分のテストはモックに置き換えなきゃいけないなあとは思っているけれど、取り急ぎテストしたかったのでこの方法でDB汚さずにテストできてすごく助かってる。

MSDTCは気を抜いてコード書いてるとデバッグ時に要求されてびっくりするから気を付けながら書かないといけない。
注意注意。