1

さまざまな理由から、UPDATEを呼び出すときにいくつかのカスタムSQLコマンドを実行できる必要があります。これをアトミックに実行して、通常とSQLの両方が成功するか、どちらも成功しないようにします。SaveChangesDbContextSaveChanges

しかし、これを達成する方法はわかりません。私がこれまでに試したことは、これとさまざまなバリエーションです。

EFトランザクション—要点

ここでのエラーは(ExecuteSqlCommand通話中)です:

ExecuteNonQueryでは、コマンドに割り当てられた接続が保留中のローカルトランザクションにある場合、コマンドにトランザクションが必要です。

さて、十分に公平です。ただし、トランザクションを受け入れるオーバーロードはExecuteSqlCommandありません。そこで、Dapperパッケージをインストールし、問題のある行をこのDapper呼び出しに置き換えて、トランザクションを渡します。

this.Database.Connection
  .Execute("insert into Tests (Foo, Bar) values ('test', 2)", 
  transaction: tran);

しかし今、エラーが発生しbase.SaveChanges()、それは私に次のことを与えます:

SqlConnectionは並列トランザクションをサポートしていません。

SaveChangesそれで、データコンテキストの接続ですでにトランザクションを作成したとしても、明らかに常に新しいトランザクションを作成しますか?

やりたいことを成し遂げる方法はありますか?

私はEntityFramework5.0コードファーストを使用しています。

4

1 に答える 1

3

すべての操作をラップしTransactionScopeます。このクラスは、.NETトランザクションの一般的な抽象化です。EFとSqlConnection'sは自動的に参加します。ただし、分散トランザクションを誤ってトリガーするなどの落とし穴があるため、必ずベストプラクティスを探してください。

于 2012-11-02T23:37:23.460 に答える