2013-07-15 3 views
1

Всякий раз, когда я завершаю приложение, я удаляю свой объект DbContext, чтобы убедиться, что соединения не установлены.Сеанс SQL Server остается открытым, когда приложение закрыто.

Когда я запустил sp_who в SQL Server Management Studio, но по какой-то причине сеанс по-прежнему существует с status = 'sleeping'.

Из-за этого я не могу выполнить определенные команды (например, DROP DATABASE), если я не убью сеанс, что требует от меня найти идентификатор и убить его вручную.

Есть ли способ немедленно убить эту сессию, когда мое приложение закрывается?

+0

Какое приложение? – CodeCaster

+0

Если вам нужно выполнить команды, которые не переносят других пользователей, «ALTER DATABASE DBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE» - ваш друг (но не друг кого-либо, у кого было соединение) –

+0

Соединения управляются инфраструктурой Entity Framework, Я просто использую контекст, который, как я думал, также закрыл соединение при его удалении. Это чисто для целей тестирования, я не думаю, что фактическое приложение столкнется с проблемами. – Kryptoxx

ответ

4

В инфраструктуре Entity используется базовый поставщик SQL Server ADO.NET, который объединяет подключения к базам данных, поскольку они являются дорогостоящей операцией для создания и очистки каждый раз.

Вы можете очистить пул соединений с помощью вызова метода SqlConnection.ClearPool на вашем обработчике событий Application_End.

Примечание: Я бы не рекомендовал отключать или промывать пул соединений для производственного кода. Альтернативный метод для разработки может быть изменен, чтобы отключить объединение пулов через вашу строку соединения с использованием опции Pooling=false.

+1

Наверное, я просто буду ругать за сеанс вручную, так как мне нужно делать это иногда для тестирования, я просто подумал, что это какая-то ошибка. В любом случае спасибо за ответ! – Kryptoxx

Смежные вопросы