3

ADO.Net Entity Framework(call、rollback、commit)でトランザクションを使用する正しい方法はどれですか?私はこのコードを持っていますが、これは私に例外を与えます

"Invalid operation. The connection is closed." 

(このコードでは、NorthwindEntitiesは「DBContext」を継承します)

NorthwindEntities context = new NorthwindEntities();
DbTransaction tran = context.Database.Connection.BeginTransaction();
var cust = context.Customers.FirstOrDefault(x => x.CustomerID == "BOLID");
cust.Country = "Nigeria";
context.SaveChanges();
tran.Rollback();
4

2 に答える 2

6

EFで「トランザクション」をコミットするcontext.SaveChanges()には、を呼び出すだけです。

内部的にSaveChangesは、接続を開き、dbトランザクションを開始し、コンテキストによって追跡されたすべての保留中の変更をストアにプッシュし、トランザクションをコミットして、接続を破棄します。変更の保存中にエラーが発生した場合、dbトランザクションはロールバックされます。

「トランザクション」をロールバックするには、コンテキストインスタンスを破棄するだけです。

通常、EFで外部データベーストランザクションを使用する必要はありません。

EFコンテキストの変更トラッカーはdbトランザクションと同等ではないため、引用符で「トランザクション」を使用していることに注意してください。コンテキストによって追跡されたデータでいくつかの変更を行った場合、その変更はストアにすぐには影響しません。に電話するまで、保留中ですSaveChanges

于 2013-01-24T08:02:40.210 に答える
0

EFには、ネイティブデータベーストランザクションに類似したTransactionScopeがあります。TransactionScopeはアプリケーション層で機能しますが、dbトランザクションと同様に動作し、EF内部でサポートされます)

于 2013-02-13T05:13:45.850 に答える