c # ConnectionContext и EF не будут разорвать соединение с БД - PullRequest
1 голос
/ 21 декабря 2010

Я создаю программу, которая переносит базу данных с одного сервера SQL (на одном ПК) на локальный экземпляр.После передачи API (Entity Framework) будет подключаться к нему и запускать на нем некоторые вещи.Затем он отключится, и два сценария SQL будут запущены на нем через класс SqlCommand.После этого резервная копия базы данных будет сохранена, а локальная временная база данных будет удалена.Проблема, с которой я сталкиваюсь, заключается в том, что экземпляр SqlCommand, который сначала подключается (до передачи), который создает базу данных, отключается без проблем (я проверяю активные подключения через Management Studio).Но как только контекст сущностей соединяется, даже с вызовом context.Dispose (), он не отключается.Затем я создаю экземпляр сервера для запуска сценариев SQL (расположенных в подпапке) с кодом, подобным следующему:

FileInfo file = new FileInfo(filename);
string removeRecords = file.OpenText().ReadToEnd();
file.OpenText().Close();

Server srv = new Server(new ServerConnection(this.myScriptConn));
ServerConnection srvConn = new ServerConnection();
srvConn.NonPooledConnection = true;
srvConn = srv.ConnectionContext;

Server server = new Server(srvConn);

server.ConnectionContext.ExecuteNonQuery(removeRecords);

server.ConnectionContext.Disconnect();

Вызов Disconnect здесь также не разрывает соединение.Поэтому, когда я ухожу, чтобы удалить базу данных, я обнаруживаю, что не могу, потому что есть 2 активных соединения.Есть ли что-то, что я делаю здесь не так или что-то, чего мне не хватает?NonPooledConnection = true - это то, что я нашел в Интернете, чтобы попробовать, если Disconnect не работает, но, очевидно, это тоже не работает.В противном случае мой код выглядел бы так:

FileInfo file = new FileInfo(filename);
string removeRecords = file.OpenText().ReadToEnd();
file.OpenText().Close();

Server server = new Server(new ServerConnection(this.myScriptConn));
server.ConnectionContext.ExecuteNonQuery(removeRecords);

server.ConnectionContext.Disconnect();

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

Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

1 голос
/ 21 декабря 2010

Я только что узнал, что выполнение SqlConnection.ClearAllPools () решает проблему и отключает все активные соединения.

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