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,我只是认为这是某种错误。无论如何,谢谢你的回答!我想我会坚持手动终止会话,因为我只需要偶尔做一些测试,我只是认为这是某种错误。无论如何,谢谢你的回答!