予想とは違う動作をしたので、焦って調べ直した。
勘違いポイント
<Complete=コミットではない>
Completeはあくまでも、コミットする準備ができたと明示的に書くだけであり、
コミットするのはUsing句を終了するときである。
コミットできないときはUsing句の終了で例外が発生する。
よって、TransactionScopeはtry&catchで囲む必要性が高そうだ。
using (var tran = new TransactionScope())
{
try
{
//
// データアクセス関連の処理
//
tran.Complete();
}
catch (Exception)
{
// 例外処理
throw;
}
}
よりは
try
{
using (var tran = new TransactionScope())
{
//
// データアクセス関連の処理
//
tran.Complete();
}
}
catch (Exception)
{
// 例外処理
throw;
}
のほうが現実的な気がする。