2011-02-08 13 views
0

私はEF4 Code-firstとのト​​ランザクションを作業単位の実装で使用しようとしています。コンテキストからConnection.BeginTransactionを使用できない理由はありますか? SQLトランザクションでのみ使用されることを意図していますか?私はそれを呼び出すとき、私はエラーが発生する:不正な操作。接続は閉じています。Connection.BeginTransactionおよびEntity Framework 4?

ありがとうございました。

答えて

1

答えの一部は、DbContext.SaveChanges()が自動的にトランザクション処理されるため、多くの場合、独自のトランザクションをロールする必要はありません。あなたのシナリオは何ですか?なぜ、あなたは手動でトランザクションを行う必要があると思いますか?

あなたがそれらを必要とすることを決定した場合、トランザクションでのSaveChangesをラップ:あなたはプロファイラを実行する場合

using (TransactionScope transaction = new TransactionScope()) 
    { 
     context.SaveChanges(); 
    } 

、あなたが使用して、{}ブロックを離れると、トランザクションがロールバックされることに注意します。トランザクションをコミットするには、transaction.Complete()を呼び出します。 SaveChanges()の後。

+0

私は、実際にSaveChanges()の前にコンテキストに加えられた変更を実際にロールバックするメカニズムがないため、手動トランザクションを行う必要があると思います。例外が発生した場合はどうなりますか? 「あなたが{}ブロックを使用した後にトランザクションがロールバックされることに気付くでしょう」と言われると、例外が発生するのはどういう意味ですか? – Rushino

関連する問題