Entity Framework 4 не закрывает соединение в SQL Server 2005 Profiler - PullRequest
3 голосов
/ 02 февраля 2012

Я впервые использую Entity Framework 4 в приложении ASP.net. Я хотел убедиться, что соединения с БД закрыты после выхода из оператора using, однако в профилировщике SQL Server 2005 я не вижу выхода из соединения при выходе из использования, только логин при его вводе,

Например, я начал с пустой страницы asp.net, а в Page_Load я попытался с помощью этого простого кода (и абсолютно ничего другого на странице):

using (var model = new DB("name=DB"))
{
  var livre = (from l in model.books
           select l).SingleOrDefault();
}

В профилировщике я вижу вход в систему Audit, но не выход из системы после оставления "using". Поэтому я попытался явно закрыть соединение, используя следующий код:

using (var model = new DB("name=DB"))
{  
  var livre = (from l in model.books
           select l).SingleOrDefault();
  model.Connection.Close();
}

Опять я вижу логин, но не выход. Странно то, что когда я проверяю свойство ConnectionState в model.Connection после закрытия, оно указывает «Закрыто», но не в Sql Server.

Чтобы увидеть фактический выход из системы в SQL Server, мне нужно нажать кнопку «Остановить отладку» в VS2010, и при перезапуске веб-приложения только тогда я вижу выход из системы (после фактического входа в систему, когда обрабатывается моя страница).

Я начинаю задумываться, есть ли в SQL Server что-то, что могло бы держать соединение открытым, даже если оно закрыто в коде.

Есть идеи?

Спасибо

1 Ответ

0 голосов
/ 20 декабря 2012

Да, в SQL Server есть что-то, что будет поддерживать соединение открытым: пул соединений. Поскольку открытие и закрытие соединений с базой данных является дорогостоящей операцией, SQL Server управляет пулом соединений, которые он будет назначать запросам на соединение. Грубо говоря, если строка соединения запроса совпадает со строкой соединения неактивного соединения в пуле, SQL Server назначит соединение запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...