Закрытие SQL-соединений (NHibernate) - PullRequest
1 голос
/ 27 января 2010

У меня есть тестовое консольное приложение, которое выполняет сценарии sql для создания базы данных и ее таблиц, а затем вставляет данные. Я использую DAO для создания, извлечения, обновления и удаления из таблиц, а затем пытаюсь удалить базу данных, но не могу, потому что она говорит, что она в данный момент используется. Как мне убить соединение? С помощью отладки и запуска сценария sql для просмотра общего количества соединений я сузил его до этого фрагмента кода, который не уничтожает соединение. Даже при том, что это говорит, что соединения очищены, база данных говорит, что это все еще связано.

foreach (ISessionFactory factory in this.connections.Values)
{
    factory.Close();
}

this.connections.Clear();
this.connections = null;

1 Ответ

1 голос
/ 27 января 2010

NHibernate самостоятельно управляет всеми соединениями с базой данных. Он открывает и закрывает базу данных так, как считает нужным, но вы можете попробовать вызвать Session.Disconnect, чтобы отключить его от соединения ADO.NET.

Однако ... если у вас включен пул соединений, который обычно является поведением соединения по умолчанию, соединение будет возвращено только в пул соединений, но не будет освобождено, и все равно будет отображаться как соединение, так что вы могли бы должны очистить пул соединений.

К сожалению, я не знаю, можете ли вы сделать это напрямую через NHibernate, но вы можете использовать объект SQLConnection для вызова вызова ClearPool или ClearAllPools ...

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