Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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# 应用程序关闭时,SQL Server会话保持打开状态_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 应用程序关闭时,SQL Server会话保持打开状态

C# 应用程序关闭时,SQL Server会话保持打开状态,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,每当我关闭应用程序时,我都会处理我的DbContext对象,以确保没有任何连接处于活动状态 当我在SQLServerManagementStudio中运行sp_who时,由于某种原因,会话仍在那里,状态为“正在睡眠” 因此,除非我终止会话,否则我无法执行某些命令(例如,DROP DATABASE),这需要我找到ID并手动终止它 是否有一种方法可以在我的应用程序关闭时立即终止此会话?Entity framework使用底层SQL Server ADO.NET提供程序,该提供程序将数据库连接池化,因

每当我关闭应用程序时,我都会处理我的
DbContext
对象,以确保没有任何连接处于活动状态

当我在SQLServerManagementStudio中运行
sp_who
时,由于某种原因,会话仍在那里,状态为“正在睡眠”

因此,除非我终止会话,否则我无法执行某些命令(例如,
DROP DATABASE
),这需要我找到ID并手动终止它


是否有一种方法可以在我的应用程序关闭时立即终止此会话?

Entity framework使用底层SQL Server ADO.NET提供程序,该提供程序将数据库连接池化,因为每次创建和刷新数据库连接都是一项昂贵的操作

您可以使用
应用程序端的方法调用
事件处理程序刷新连接池


注意:我不建议为生产代码禁用或刷新连接池。另一种开发方法是使用
pooling=false
选项修改以通过连接字符串禁用池。

实体框架使用底层SQL Server ADO.NET提供程序来池数据库连接,因为每次创建和刷新数据库连接都是一项昂贵的操作

您可以使用
应用程序端的方法调用
事件处理程序刷新连接池


注意:我不建议为生产代码禁用或刷新连接池。另一种开发方法是使用
pooling=false
选项修改以通过连接字符串禁用池。

什么类型的应用程序?如果您需要执行不允许其他用户的命令,则您的朋友是
ALTER DATABASE DBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
(但不是其他有关系的人的朋友)连接由实体框架管理,我只使用上下文,我认为上下文在释放时也会关闭连接。这纯粹是出于测试目的,我认为实际应用程序不会因此遇到问题。什么样的应用程序?如果需要执行不允许其他用户的命令,
ALTER DATABASEDBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
是您的朋友(但不是任何其他有连接的人的朋友)连接是由实体框架管理的,我只是使用上下文,我认为上下文在释放时也会关闭连接。这纯粹是出于测试目的,我认为实际应用程序不会因此遇到问题。我想我会坚持手动终止会话,因为我只需要偶尔为tes执行此操作ting,我只是认为这是某种错误。无论如何,谢谢你的回答!我想我会坚持手动终止会话,因为我只需要偶尔做一些测试,我只是认为这是某种错误。无论如何,谢谢你的回答!