0

それはコントローラに「DBContext」のグローバル変数を宣言して、すべてのデータベース操作のためにそれを使用するために正しいですか?DbContext宣言 - フレームワーク4.1 - MVC 3.0

例:

public class ProductController : Controller 
{ 
    private readonly DBContextEntities _db = new DBContextEntities(); 

    public ActionResult Index() 
    { 
    var products = _db.Products.ToList(); 
    return View(products); 
    } 

    public ActionResult Create() 
    { 
    _db.Products.AddObject(new Product{Name="x",Price="5.2"}); 
    _db.SaveChanges(); 
    return View(products); 
    } 

}

してくださいアドバイス、

+2

が重複する可能性に処分されていない場合にまれな場合もあります(http://のstackoverflow。 com/questions/813457/entity-linq-to-entitiesのインスタンス化)。 DbContextのライフサイクル管理は、すでに[議論](http://stackoverflow.com/questions/6334592/one-dbcontext-per-request-in-asp-net-mvc-without-ioc-container)何回もありました](http://stackoverflow.com/questions/6987908/what-is-the-best-way-to-instantiate-and-dispose-dbcontext-in-mvc)。 –

答えて

1

私は数回これを量ることを試みました。私は大部分の状況で大丈夫だという結論に達しました。これは「なぜ」私はそれが大丈夫であるべきだと思います。

すべてのアドバイスは、できるだけ時間オープンのコンテキストを維持することを提案、これは実体のトンがロードされ、メモリに保持されるのを避けることです。 これは、クラス内ではなく、各メソッドでコンテキストを作成して配置する必要があると考えるようになります。

HTTP要求の期間が短いため、グローバルに利用可能なコンテキストを持つことは大きなオーバーヘッドではないはずですが、毎回コンテキストを作成するために必要なリソースは、要求の期間中開いたままにする利点を上回ります。

この回答は、Webフォームの観点からですが、私はMVCコントローラが要求よりも長く生き続けられる場合は100%ではないと私は怖い異なる応答を必要とします。

私は、文脈を静的なもの、またはアプリケーションの持続時間のために生きるものとして設定するのではなく、メモリ内のエンティティの数が増えるにつれて大量のメモリ消費につながると考えています。あなたが明示的に使用してブロック内IDisposableインターを実装して何かを入れていないと主張することができ

は、私は同意するだろう悪い考えです。

(免責事項:推測の段落!) これは、ページが例外などをチャックした場合にリソースが開いたままになる可能性がわかりません。私は、時間の99.9%が、あなたは大丈夫だろうと思いますが、リソースは[エンティティへのLINQのコンテキストをインスタンス化]の正確

関連する問題