2

MSDTC をサポートしていない Azure および Azure SQL にデプロイしましたが、ネストされた接続であると思われるものを防ぐためにコードを修正する方法を理解するのに苦労しています。私は EF の初心者であり、TransactionScope についての知識はそれほど多くないため、正しいパターンを持っているかどうかわかりません。

ObjectContext の共有インスタンスを呼び出すリポジトリを使用しようとしています (EndRequest で破棄しようとしましたが、問題があったため、これは別の問題です)。

ObjectContext インスタンスで SaveChanges を数回呼び出すトランザクションがありますが、ある時点で破棄されます。これを管理しているのは何ですか?正しく機能させるために私ができることをお勧めできますか?

4

1 に答える 1

3

分散トランザクションの問題を回避したい場合は、接続を手動で処理する必要がありTransactionScopeます。これは、すべてのクエリとデータベースの更新に 1 つの接続が使用される = 1 つのコンテキスト インスタンスごとに 1 つの開かれた接続のみが必要だからです。コードは次のようになります。

using (var context = new YourObjectContext()) {
    context.Connection.Open();

    ...
}

ObjectContext の共有インスタンスを呼び出すリポジトリを使用しようとしています (EndRequest で破棄しようとしましたが、問題があったため、これは別の問題です)。

複数のリクエスト間でコンテキスト インスタンスを共有する場合、またはすべてのリクエストを処理するために 1 つのコンテキスト インスタンスのみを使用する場合はさらに悪いことに、今すぐ停止してアプリケーションを完全に再設計する必要があります。そうしないと、正しく動作しません。

于 2012-12-20T10:32:42.430 に答える