2017-02-23 9 views
0

usingステートメントをEntity Frameworkで使用する場合、関数が返される前に破棄されますか?例えば ステートメントロジックを使用するEntity Framework

は、私がこの

public ActionResult test() 
{ 
    using (var empDb = new empEntities()) 
    { 
    var mod = (from emps in empDb.employees 
       select emps); 
    return View(mod); 
    } 
} 

のようなものを持っていると言ういリターンビュー(MOD)の前に、エンティティのusingステートメントを処分。またはビューが閉じられるまでまだ開いていますか?

+0

はい。モデルをビューに渡す前に、モデルをマテリアライズする必要があります。ビューを渡すとIQueryableが悪いです。つまり、ビューがレンダリングされるまでにコンテキストが破棄されているからです。ビューはデータベースに呼び出されるべきではありません(IQueryableを渡すと起こります)。依存関係注入を使用して、要求スコープの期待寿命があるコンテキスト(私はこれをninjectで行う)を手に入れることができますが、この問題は解消されますが、非マテリアライズド・クエリをビューに渡すのは快適ではありません。 – spender

答えて

0

原則としてIDisposableオブジェクトを使用すると、usingステートメントはオブジェクトのDisposeメソッドを正しい方法で呼び出し、Disposeが呼び出されるとすぐにオブジェクト自体がスコープから外れるようにします。使用ブロック内。 usingステートメントを使用すると、オブジェクトのメソッドを呼び出すときに例外が発生しても、Disposeが確実に呼び出されます。 tryブロックの中にオブジェクトを置き、finallyブロックでDisposeを呼び出すことで同じ結果を得ることができます。これは、usingステートメントがコンパイラによってどのように変換されるかです。

関連する問題