2

アプリケーションで Entity Framework の複数の DBEntityContext を使用しないように警告されました。その理由は、データベースへの同時アクセスによるデッドロックのリスクです。

誰でもこれを確認できますか?これが本当なら、DBContext に Singleton オブジェクトを実装するのは良い考えですか?

この問題に関する記事は大歓迎です。

ありがとうアドバンス。

4

2 に答える 2

8

ObjectContext と DbContext はスレッド セーフではありません。http://msdn.microsoft.com/library/system.data.objects.objectcontext.aspxを参照してください。ASP.NET のようなマルチスレッド環境でそれらを使用すると、単一のインスタンスを使用するときに大きな問題が発生します。リクエストごとに 1 つの ObjectContext を使用することをお勧めします。ObjectContext は、リクエストの最後に破棄する必要があります。n 層 ASP.NET アプリケーションにおける Entity Framework ObjectContext のライフスパンとスコープの管理に関する記事が役立つ場合があります。

デッドロックについて教えてくれたアドバイザーを誤解している可能性はありますか? ObjectContext を間違った方法で使用するとデッドロックが発生する可能性があることを警告したいのかもしれません。

于 2012-06-14T13:48:20.677 に答える
3

Web アプリケーションでは、処理された Web リクエストごとに新しいコンテキスト インスタンスを使用し、不要になったインスタンスを破棄する必要があります。コンテキストと EF に関連するものはスレッド セーフではありません。さらに、コンテキストインスタンスの使用に他の制限を加える作業単位と ID マップパターンを実装します。

デッドロックが発生する可能性がありますが、これは正しいトランザクション設計によって解決する必要があります。

于 2012-06-12T08:05:35.063 に答える