实体框架4 -活动连接数

本文关键字:连接 活动 框架 实体 | 更新日期: 2023-09-27 18:18:04

我有一个使用实体框架4(ObjectContext)的旧应用程序。EF 6有DbContext。

在EF4中,我可以显式打开数据库连接,并做如下操作

using(var context = new EmployeeContext)
{
context.Connection.Open();
// and then here I am accessing some database objects
// and then calling context.SaveChanes();
}

同样在其他一些文件中,我有如下代码:代码没有调用context.Connection.Open();

using(var context = new EmployeeContext)
{
// here I am accessing some database objects
// and then calling context.SaveChanes();
}

我知道以上两种方法都可以。应用程序被相当多的用户使用(有时大约有1200个并发用户)。

现在我去到我的数据库服务器,在我的应用程序使用的高峰时间运行下面的查询

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
dbid, loginame

它显示当时大约有5000个开放的连接,这就是我想的;是因为吗?context.Connection.Open()作为代码没有显式调用context.Connection.Close(),因为这个连接仍然打开,这增加了数据库服务器的负载。虽然context.Connection.Open()是用block封闭的

的想法吗?

实体框架4 -活动连接数

看看这段代码

using(var context = new EmployeeContext)
{
    context.Connection.Open();
    // and then here I am accessing some database objects
    // and then calling context.SaveChanes();
}

一旦context超出using语句的作用域,就会调用context.Dispose(),从而关闭连接。

对。open()的显式调用不需要显式调用。close(),尽管您确实希望确保在不再需要打开连接时立即离开using块。