3

LINQ to SQL では、データベースで選択を実行した後 (そしてもちろん、データを消費した後) にコンテキストを閉じる必要がありますか? 開いたままにすると、サーバーへの接続が開いたままになっているということではないですか?

ありがとう、ルシアン

4

4 に答える 4

2

Q. データベース接続はどのくらいの期間開いたままになりますか?

A. 通常、接続はクエリ結果を使用するまで開いたままになります。すべての結果を処理するのに時間がかかることが予想され、結果をキャッシュすることに抵抗がない場合は、クエリに ToList(TSource) を適用します。各オブジェクトが 1 回だけ処理される一般的なシナリオでは、DataReader と LINQ to SQL の両方でストリーミング モデルが優れています。

接続の使用の正確な詳細は、次の要素によって異なります。

DataContext が接続オブジェクトで構築されている場合の接続ステータス。

接続文字列の設定 (複数のアクティブな結果セット (MARS) の有効化など)。詳細については、「複数のアクティブな結果セット (MARS)」を参照してください。


MSDN LINQからSQL への FAQ

于 2009-02-15T18:01:55.923 に答える
2

Dispose メソッドを使用して DataContext を閉じるまで、基になる接続は閉じられず、破棄されません。DataContext を使用した後は、常に Dispose を呼び出す必要があります。DataContext を従来の Connection オブジェクトと考えてください。これは多かれ少なかれ内部にあるものです。

于 2009-02-15T17:55:27.000 に答える
1

短い答えはイエスです。必要なときにのみデータコンテキストを開き、できるだけ早く閉じる必要があります。破棄しないと、基になるデータベース接続が開いたままになる可能性があります。

すでに同様の質問をしている他の多くの人々がいます。それらのいくつか調べ てみると、かなり良い議論がいくつか見つかります

于 2009-02-15T19:35:28.993 に答える
1

LiNQ 内のすべての名前については、少し確信が持てません。エンティティ フレームワークでは、オブジェクト コンテキストが変更追跡を実行しようとしていることを意味します。切断されたシナリオの場合、多くの問題が発生します。

残念ながら、現在の ASP.NET は変更追跡との互換性があまりないため、使用後にコンテキストを閉じることが、asp.net でエンティティ フレームワークを処理する最善の方法です。コンテキストを開いたままにしようとすると、エンティティの更新に問題が発生することがあります。これは、Linq でも同じ問題であるはずです。

同じマシン上またはローカル ネットワーク内のデータベースを使用する Windows フォーム アプリケーションでは、変更の追跡とデータベースへの直接接続を利用できるように、ファサード (コードの重複が少ない) を介してオブジェクト コンテキストを再利用します。

于 2009-02-15T17:56:57.950 に答える