Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#ConnectionContext和EF不会中断数据库连接_C#_Sql - Fatal编程技术网

c#ConnectionContext和EF不会中断数据库连接

c#ConnectionContext和EF不会中断数据库连接,c#,sql,C#,Sql,我正在创建一个程序,将数据库从一台SQL server(在一台PC上)传输到本地实例。在传输之后,一个API(实体框架)将连接到它并在上面运行一些东西。然后它将断开连接,并通过SqlCommand类在其上运行两个SQL脚本。之后,将备份和保存数据库,并删除本地临时数据库。我遇到的问题是,创建数据库的第一个连接(在传输发生之前)的SqlCommand实例断开连接时没有出现问题(我通过managementstudio检查活动连接)。但是一旦实体上下文连接,即使使用context.Dispose()调

我正在创建一个程序,将数据库从一台SQL server(在一台PC上)传输到本地实例。在传输之后,一个API(实体框架)将连接到它并在上面运行一些东西。然后它将断开连接,并通过SqlCommand类在其上运行两个SQL脚本。之后,将备份和保存数据库,并删除本地临时数据库。我遇到的问题是,创建数据库的第一个连接(在传输发生之前)的SqlCommand实例断开连接时没有出现问题(我通过managementstudio检查活动连接)。但是一旦实体上下文连接,即使使用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();
这里的断开呼叫也不会中断连接。因此,当我删除数据库时,我发现我无法删除,因为有两个活动连接。这里有什么我做错了的还是我遗漏了什么?NonPooledConnection=true是我在网上发现的,如果断开连接不起作用,我可以尝试使用它,但显然也不行。否则,我的代码将如下所示:

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();
我确信在进行任何新连接之前,我正在断开以前的连接。断开实体连接的唯一方法是关闭程序,这显然不是我想要的


任何帮助都将不胜感激,谢谢

我刚刚发现执行SqlConnection.ClearAllPools()可以修复问题并断开所有活动连接。

我刚刚发现执行SqlConnection.ClearAllPools()可以修复问题并断开所有活动连接