【问题标题】:Entity framework 4 not closing connection in sql server 2005 profiler实体框架 4 未在 sql server 2005 探查器中关闭连接
【发布时间】:2012-02-25 05:58:10
【问题描述】:

我第一次在 ASP.net 应用程序中使用实体框架 4。 我想确保在离开 using 语句后关闭 DB 连接,但是,在 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 中是否有某些东西可能使连接保持打开状态,即使它在代码中已关闭。

有什么想法吗?

谢谢

【问题讨论】:

  • 这是一种预期行为 了解connection reusing/pooling
  • 我怀疑你在工作中看到connection pooling。池在哪里维护连接,以便它可以快速重用于下一个请求。
  • 在 sql 连接字符串中添加:Pooling=false,但要注意性能影响。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多