2010-12-31 13 views
2

asp.net mvcアプリケーションでLINQ to SQLを使用しています。私はajax呼び出しを介してストアドプロシージャを呼び出しています。LINQ to SQL DB接続が閉じない

2〜3人のアクティブな接続は100のアクティブな接続になります。サーバーのタイムアウトが発生します。

次に、IOC -autofacを使用してdatacontextを持つリポジトリを再利用しました。今、私はログインしているユーザ1人に1つプラスSQLサーバ上でアクティブな接続を取得します。 私はこれまでにこれを見たことがありません。

  1. なぜ、Lin2sqlは使用していないときに接続を切断しないのですか?
  2. ログインしたセッションでajax呼び出しでストアドプロシージャを呼び出すと、新しいアクティブな接続が作成されますか?
  3. ストアドプロシージャをループで実行するか、またはwaitforを使用して接続を開くことができますか?
+0

コードを追加する必要があります。あなたはどこかで接続を解放していません... – gbn

+0

Isnt LINQ 2 SQLは遅延ロードされているので、必要なときにのみ接続を開いていると想定しています。また、それはそれが処分されても必要がなくなったときに接続を閉じます。右?? – Joe

+1

これは正しくありません。レイジーローディングは、接続を開いたり閉じたりしても関係ありません。 –

答えて

1

L2Sコンテキストオブジェクトに関連付けられた接続は、接続オブジェクトが破棄されるのは、自分またはGCのいずれかによってのみです。それは、非活動のために落ちることはありません。

Usingステートメントでコンテキストオブジェクトを作成しようとすると、適切に処理されます。

+0

リポジトリパターンのdatacontextはいつusingステートメントを使用しますか? – Joe

+0

@Joe:これは役に立ちます - http://stackoverflow.com/questions/2357615/how-do-i-correctly-dispose-a-linq-to-sql-datacontext-in-a-repository –

+0

私は使い捨てリポジトリでは、しかし私は)a)を使用してリポジトリをラップしていないb)autofacの寿命を制限する – Joe

関連する問題