私はEF4 Code-firstとのトランザクションを作業単位の実装で使用しようとしています。コンテキストからConnection.BeginTransactionを使用できない理由はありますか? SQLトランザクションでのみ使用されることを意図していますか?私はそれを呼び出すとき、私はエラーが発生する:不正な操作。接続は閉じています。Connection.BeginTransactionおよびEntity Framework 4?
ありがとうございました。
私はEF4 Code-firstとのトランザクションを作業単位の実装で使用しようとしています。コンテキストからConnection.BeginTransactionを使用できない理由はありますか? SQLトランザクションでのみ使用されることを意図していますか?私はそれを呼び出すとき、私はエラーが発生する:不正な操作。接続は閉じています。Connection.BeginTransactionおよびEntity Framework 4?
ありがとうございました。
答えの一部は、DbContext.SaveChanges()が自動的にトランザクション処理されるため、多くの場合、独自のトランザクションをロールする必要はありません。あなたのシナリオは何ですか?なぜ、あなたは手動でトランザクションを行う必要があると思いますか?
あなたがそれらを必要とすることを決定した場合、トランザクションでのSaveChangesをラップ:あなたはプロファイラを実行する場合
using (TransactionScope transaction = new TransactionScope())
{
context.SaveChanges();
}
、あなたが使用して、{}ブロックを離れると、トランザクションがロールバックされることに注意します。トランザクションをコミットするには、transaction.Complete()を呼び出します。 SaveChanges()の後。
私は、実際にSaveChanges()の前にコンテキストに加えられた変更を実際にロールバックするメカニズムがないため、手動トランザクションを行う必要があると思います。例外が発生した場合はどうなりますか? 「あなたが{}ブロックを使用した後にトランザクションがロールバックされることに気付くでしょう」と言われると、例外が発生するのはどういう意味ですか? – Rushino