2017-07-20 3 views
0

例:トランザクションを使用し、特定の条件が満たされた場合にのみコミットする。いくつかの条件で変更をコミットしない場合は、トランザクションを手動でロールバックする必要がありますか?

using (var transaction = context.Database.BeginTransaction()) 
    // ... 
    if (modelState.IsValid) { 
     transaction.Commit(); 
    } 
} 

それはする必要はない:

using (var transaction = context.Database.BeginTransaction()) 
    // ... 
    if (modelState.IsValid) { 
     transaction.Commit(); 
    } else { 
     transaction.Rollback(); 
    } 
} 

またはelse一部の必要がありません。指定しないとどうなりますか? 良いガイドラインがありますか?

+0

[msdn](https://msdn.microsoft.com/en-us/library/dn456843(v=113).aspx)「開始DbContextTransactionが接続を開いた場合、Dispose()が呼び出されたときに接続が閉じられます。 – Sergey

答えて

2

usingステートメントを使用しているため、ロールバックを手動で呼び出す必要はありません。 Rollbackを明示的に呼び出す必要はありません。 Commit()が呼び出されていない場合、トランザクションはロールバックされます。

DbContextTransaction.Disposeメソッドは、使用ブロックの最後に呼び出されます。トランザクションが正常にコミットされなかった場合、トランザクションは自動的にロールバックされます。

関連する問題