我在ASP.net应用程序中第一次使用实体框架4。 我想确保在离开using语句后关闭数据库连接,但是,在SQL Server 2005探查器中,我在离开使用时看不到连接注销,只能在输入时看到登录,
例如,我从一个空白的asp.net页面开始,在Page_Load中,我尝试使用这个简单的代码(并且绝对没有页面中的任何其他内容):
using (var model = new DB("name=DB"))
{
var livre = (from l in model.books
select l).SingleOrDefault();
}
在分析器中,我看到了审核登录,但在退出“使用”后没有注销。 所以我尝试使用以下clode显式关闭连接:
using (var model = new DB("name=DB"))
{
var livre = (from l in model.books
select l).SingleOrDefault();
model.Connection.Close();
}
再次,我看到了登录,但没有注销。奇怪的是,当我在关闭后检查model.Connection中的ConnectionState属性时,它表示“已关闭”,但不是在Sql Server中。
要在SQL Server中查看实际的注销,我必须按下VS2010中的“停止调试”按钮,当我重新启动Web应用程序时,才会看到注销(在我的页面处理完成后进行实际登录)。
我开始怀疑SQL Server中是否存在可能会保持连接打开的内容,即使它已在代码中关闭。
有什么想法吗?
由于
答案 0 :(得分:0)
是的,SQL Server中有一些东西可以保持连接打开:连接池。由于打开和关闭数据库连接是一项昂贵的操作,因此SQL Server管理它将分配给连接请求的连接池。粗略地说,如果请求连接字符串与池中非活动连接的连接字符串匹配,SQL Server将为该请求分配连接。