Entity Frameworkのコンテキストはusingステートメントに入れるべきですか?

c# entity-framework

質問

Entity Frameworkのコンテキストオブジェクトは、「オブジェクトコンテキストで使用されているリソースを解放する」Dispose()メソッドを実装しています。それは本当に何をしますか?それを常にusing {}文に入れるのは悪いことでしょうか。 usingステートメントの有無にかかわらず使用されています。

具体的には、WCFサービスメソッド内からEFコンテキストを使用してコンテキストを作成し、いくつかのlinqを実行して回答を返します。

編集:これについて疑問に思うのは私だけではないようです。別の質問は、Dispose()メソッド内で実際に何が起こっているのかということです。接続を閉じると言う人もいれば、そうでないとする人もいます。どうしたんだ?

受け入れられた回答

コンテキストを作成した場合は、後でそれを破棄する必要があります。 using文を使用する必要がある場合は、コンテキストの有効期間によって異なります。

  1. メソッド内でコンテキストを作成してこのメソッド内でのみ使用する場合は、 usingステートメントを使用する必要があります。追加のコードなしで例外処理が可能になるためです。

  2. コンテキストをより長い期間使用する場合、つまりライフタイムがメソッドの実行時間によって制限されない場合、 usingステートメントを使用することはできず、 Dispose()自分で呼び出す必要があり、常にそれを呼び出すように注意してください。

Dispose()はオブジェクトコンテキストに対して何をしますか?

私はコードを見ていませんでしたが、少なくとも、それが基盤となるソケットとのデータベース接続や、トランスポートメカニズムが使用していたあらゆるリソースを閉じることを期待しています。


人気のある回答

Per Progamming Entity Framework : "ObjectContextを明示的に破棄することも、ガベージコレクタがその仕事をするのを待つこともできる。"

つまり、usingステートメントは必須ではありませんが、ガベージコレクションを待つのではなくリソースがすぐに解放されるため、ObjectContextの使用が完了したことがわかっているのであればベストプラクティスです。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ