1

JaroslawKowalskiプロバイダーラッパーをデバッグしていました。デバッグ中に、EntityFrameworkがすべてのクエリの後に接続を閉じることを確認しました。データベースとのすべての対話で、アプリケーションの存続期間中、データベース接続が開かれ、クエリの実行後に接続が閉じられます

私の質問は次のとおりです。

  • 基盤となるプロバイダーがデフォルトで接続プールを実行するかどうか。
  • 独自のプーリングを提供する場合、接続をいつ閉じるかをどのように知ることができますか。現時点では、Thread.GetDomain()。ProcessExitイベントに登録し、イベントが発生したときに接続を閉じています。このアプローチは良いですか?

私を悩ませているのは、EntityFramework自体が接続を閉じていることです。したがって、接続をプールすることを少し躊躇します。そうしないと、例外的なシナリオで問題が発生する可能性があります。

4

3 に答える 3

4

ご参考までに:

EFは、開いている接続のみを閉じます。

したがって、このようなことを手動で行う場合:

((ctx.Connection as EntityConnection).StoreConnection as SqlConnection).Open();

後続のクエリでありSaveChanges()、その接続を閉じないでください。

お役に立てれば

アレックス

于 2009-12-18T16:27:08.537 に答える
2

デフォルトのconnectionpool=1接続。だから心配しないでください。

ここでの全体的な考え方は、1つのプログラミングモデル(切断された)があり、構成と調整は外部であるということです。

于 2009-12-18T13:28:47.133 に答える
0

.Net 4で、引用するには:接続とトランザクションの管理

接続を管理する場合は、次の考慮事項が適用されます。

オブジェクトコンテキストは、操作の前にまだ開いていない場合、接続を開きます。オブジェクトコンテキストが操作中に接続を開くと、操作が完了すると常に接続が閉じられます。

手動で接続を開くと、オブジェクトコンテキストは接続を閉じません。CloseまたはDisposeを呼び出すと、接続が閉じられます。

オブジェクトコンテキストが接続を作成する場合、コンテキストが破棄されるときに接続は常に破棄されます。

長時間実行されるオブジェクトコンテキストでは、コンテキストが不要になったときにコンテキストが破棄されるようにする必要があります。

オブジェクトコンテキストに開いているEntityConnectionを指定する場合は、それが破棄されていることを確認する必要があります。

于 2013-03-04T09:58:24.360 に答える