У нас есть модульные тесты, чтобы проверить, успешно ли работают функции установки и удаления нашей базы данных.
В модульных тестах используется класс SqlClient.SqlConnection для проверки содержимого базы данных до, во время и после.
Наша проблема заключается в том, что после использования SqlClient.SqlConnection часть drop login не удаляется, поскольку утверждает, что пользователь в данный момент вошел в систему. Даже если мы вызвали SqlConnection.Close (), логин, кажется, все еще открыт.
Наш код выглядит примерно так:
InstallTables(); // function uses smo to create tables in a database.
string connString = CreateLogin("userName", "password"); // create login with smo
// Test the returned connection string connects to the database
using (SqlConnection con = new SqlConnection(connString))
{
con.Open();
//test code to read the DB version out of a table
//Dispose calls con.Close() - I have also tried calling it explicitly
}
DropTables(); // uses smo to drop tables from the database
DropLogin("userName", "password"); // uses smo to drop the login
Сбой DropLogin со следующим исключением:
System.Data.SqlClient.SqlException: Не удалось отбросить имя входа «eng_ecurity_unittest_129418264074692569», поскольку пользователь в данный момент вошел в систему.
Если я удаляю весь код SqlConnection до окончания DropLogin, то все работает нормально.
Кто-нибудь знает, почему пользователь не вышел из системы, когда я вызываю SqlConnection.Close ()?
Это как-то связано с пулами соединений?