Sql server 2005 实体框架4未关闭sql server 2005探查器中的连接
我第一次在ASP.net应用程序中使用entity framework 4。 我想确保在离开using语句后关闭DB连接,但是,在SQL Server 2005探查器中,我在离开using语句时看不到连接注销,只有在进入时才看到登录 例如,我从一个空白的asp.net页面开始,在页面加载中,我尝试使用以下简单代码(页面中完全没有其他代码): 在profiler中,我看到了审计登录,但没有看到离开“using”后的注销。 因此,我尝试使用以下clode显式关闭连接:Sql server 2005 实体框架4未关闭sql server 2005探查器中的连接,sql-server-2005,entity-framework-4,Sql Server 2005,Entity Framework 4,我第一次在ASP.net应用程序中使用entity framework 4。 我想确保在离开using语句后关闭DB连接,但是,在SQL Server 2005探查器中,我在离开using语句时看不到连接注销,只有在进入时才看到登录 例如,我从一个空白的asp.net页面开始,在页面加载中,我尝试使用以下简单代码(页面中完全没有其他代码): 在profiler中,我看到了审计登录,但没有看到离开“using”后的注销。 因此,我尝试使用以下clode显式关闭连接: using (var mode
using (var model = new DB("name=DB"))
{
var livre = (from l in model.books
select l).SingleOrDefault();
model.Connection.Close();
}
同样,我看到的是登录,但不是注销。奇怪的是,当我在model.Connection中检查close之后的ConnectionState属性时,它表示“Closed”,但在Sql Server中没有
要查看SQL Server中的实际注销,我必须在VS2010中按下停止调试按钮,当我重新启动Web应用程序时,才可以看到注销(随后是处理页面时的实际登录)
我开始怀疑SQL Server中是否有某种东西可以保持连接打开,即使在代码中连接已关闭
有什么想法吗
谢谢是的,SQL Server中有一种东西可以保持连接打开:连接池。由于打开和关闭数据库连接是一项昂贵的操作,SQL Server将管理一个连接池,它将分配给连接请求。粗略地说,如果请求连接字符串与池中非活动连接的连接字符串匹配,SQL Server会将连接分配给请求。这是一种预期行为,我怀疑您在工作中看到了。池维护连接,以便可以在下一个请求中快速重用。将:Pooling=false添加到sql连接字符串中,但要注意性能影响。
using (var model = new DB("name=DB"))
{
var livre = (from l in model.books
select l).SingleOrDefault();
model.Connection.Close();
}