質問: 毎回、ASP.NET / MVC5 / WebAPI2 / FE6 / MSSQLアプリケーションで次の例外が発生しています。 > System.InvalidOperationException:モデルの作成中にコンテキストを使用できません。この例外は、コンテキストがOnModelCreatingメソッド内で使用されている場合、または同じコンテキストインスタンスが複数のスレッドによって同時にアクセスされる場合にスローされる可能性があります。 DbContextおよび関連するクラスのインスタンスメンバーは、スレッドセーフであることが保証されていないことに注意してください。 > > 私はこれを`AuthorizeAttribute`派生である自分の認証コードにトレースし、自分のWeb APIコンシューマーのAPIキーが有効であることを確認するための独自の`DbContext`をインスタンス化します(データベースにアクセスしようとするとエラーが発生します)。 `AuthorizeAttribute`今度は私の誘導体であるコントローラ飾る`BaseController` **も**インスタンス化し、 `DbContext`コントローラの仕事のために。 日のためにこれをトラブルシューティングしようと読んだ後、これをして、この私は2つの作成すると思われる`DbContext`要求ごとにインスタンスが問題です。しかし、私はどのように私はこの作品のための単一のインスタンスを使用することができますかはよく分かりません。私のコントローラコードは現在、独自の作成時に`DbContext`インスタンス化し、コントローラ自体が`DbContext`ときにその`DbContext`を透過的に`DbContext`ます。 `AuthorizeAttribute`はこのすべてから完全に独立しており、独自の目的のためにオンデマンドでコンテキストを作成します。 両方の作業単位に同じ`DbContext`を保持/再利用する方法は?
回答: Entity Framework 6を初めて使って基本アプリケーションを使い始めるときと全く同じ問題がありました。 私にとって最良の解決策は、Autofac(MVCインテグレーションあり)とAutofacのInstancePerRequestライフタイムスコープを使用して、要求ライフサイクル中に1つのDbContextインスタンスのみを確保することでした。 依存関係注入ルート(私が強くお勧めします)をダウンさせることに興味があるなら、私はAutofacに身近に触れることをお勧めします - あなたの特定の問題の詳細については、 ここで davidbittonの答えをチェックしてください - 。