【发布时间】: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