sql-server-2005 - Entity Framework 4 未关闭 sql server 2005 分析器中的连接

标签 sql-server-2005 entity-framework-4

我第一次在 ASP.net 应用程序中使用 Entity Framework 4。 我想确保在离开 using 语句后关闭数据库连接,但是,在 SQL Server 2005 事件探查器中,我在离开 using 时看不到连接注销,只有在进入它时看到登录,

例如,我从一个空白的 asp.net 页面开始,在 Page_Load 中,我尝试使用这个简单的代码(页面中绝对没有其他内容):

using (var model = new DB("name=DB"))
{
  var livre = (from l in model.books
           select l).SingleOrDefault();
}

在分析器中,我看到了审计登录,但没有看到离开“使用”后的注销。 所以我尝试使用以下代码显式关闭连接:

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 中是否有某些东西可以使连接保持打开状态,即使它在代码中已关闭也是如此。

有什么想法吗?

谢谢

最佳答案

是的,SQL Server 中有一些东西可以保持连接打开:连接池。由于打开和关闭数据库连接是一项昂贵的操作,因此 SQL Server 管理一个连接池,它将分配给连接请求。粗略地说,如果请求连接字符串与池中非事件连接的连接字符串匹配,则 SQL Server 会将连接分配给请求。

关于sql-server-2005 - Entity Framework 4 未关闭 sql server 2005 分析器中的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9114722/

相关文章:

c# - Entity Framework 4.0 函数导入 - 为什么它没有在我的对象上下文中显示为方法?

c# - Entity Framework - 生成额外 JOIN 的导航属性

c# - Entity Framework 4(纯 POCO)上的更新操作问题

sql-server - Oracle 和 SQL Server 中的 nvarchar 和 varchar

sql - 使用 SQL Server CTE 返回所有父记录

sql-server-2005 - SQL Server 2005 - 字符编码问题

sql-server - 仅在我的机器上运行缓慢的查询

c# - 具有多个引用的 Entity Framework LoadProperty

c# - 使用 c# 和 Entity Framework 将一组记录从一个 sql-server 复制到另一个

sql-server - 如何获取以下场景的 CSV 值