1

エンティティ フレームワークを使用して asp.net MVC4 アプリケーションを開発しています。

エンティティのコンテキストを静的クラスに保持して、コンテキストを作成する場所を 1 つだけにする必要がありますか?それとも、各コントローラーでコンテキストを作成する必要がありますか?

そして、自分で Dispose() を呼び出す必要がありますか、それとも GC から安全に行われますか (ここで 2 番目の回答で述べたように: Entity Framework Context be Put into Using Statement? )。

静的クラスを使用することにした場合、コンテキスト変数を破棄する安全なポイント (「アプリケーションの終わり」) はありますか?

私の静的クラスの例:

public static class ApplicationHelper
{
    static ApplicationHelper()
    {
        Db = new ApplicationEntities();
    }

    internal static readonly ApplicationEntities Db;
}
4

1 に答える 1

2

コンテキストはスレッドセーフとは見なされないため、静的変数に含めることはおそらく悪い考えです。また、GC は、必要に応じて、おそらくすべての接続が使い果たされた後の遠い時点で、コンテキストで dispose を呼び出します。つまり、明示的に Dispose を呼び出します。これは通常、using()ステートメントを使用して行われます。

全体として、DI コンテナーを使用してコンテキストを注入し、接続の有効期間をそのように管理するか、リポジトリ パターンを介してコンテキストの有効期間を管理する Unit Of Work パターンを実装するか、明示的に接続を開いたり閉じたりする必要があります。コントローラーのアクションメソッドで。

public ActionResult SomeAction()
{
 using( var db = new ApplicationEntities() )
 {
  //todo: use db
 }
 return View();
}
于 2013-04-08T09:45:55.060 に答える