2017-01-08 6 views
0

グローバルな例外ハンドラで未処理の例外を処理しています。要求の処理中に未処理の例外が発生した場合、コントローラのdisposeメソッドが呼び出されますか? (MVCとWeb APIの両方で)コントローラとDbcontext Dispose

たとえば、リクエスト全体で同じEF dbcontextを使用しようとしています。

public abstract class BaseController : Controller 
{ 
    public BaseController() 
    { 
     Database = new DatabaseContext(); 
    } 

    protected DatabaseContext Database { get; set; } 

    protected override void Dispose(bool disposing) 
    { 
     Database.Dispose(); 
     base.Dispose(disposing); 
    } 

}

+0

複雑なライフサイクルがあり、 'DbContext'をスレッド化する必要がある場合は、非常に強力で軽量ですが複雑なため、ユースケースが必要なのでhttps://github.com/mehdime/DbContextScopeをチェックしてください。つまり、libの開発につながるバックグラウンドを読むだけで、このトピックを啓発しています。 –

答えて

0

返事が遅れたが..私は不確実な天気をか処分は、すべてのエッジケースで実行することが保証されています:この基本クラスを使用することが安全です。しかし、あなたのシナリオをテストするのは簡単なはずです。

これは、実際にはdbcontextを処理することは実際には重要ではないと思われます。原則として、それは良い習慣として行われるべきです。しかし、Jon Gallantsのブログ投稿hereで指摘されているように、MSの開発者によれば必要ではありません。そのため、まれに、dbコンテキストが破棄されないことがほとんどありません。

あなたの文脈の境界を尊重している限り、私はそれがあなたにとって安全だと信じています。 I.Eは、リクエスト内の異なるスレッド上でパラレルで操作を実行しません。たとえば、このコンテキスト・インスタンスを使用します。