实体框架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封闭的
的想法吗?
看看这段代码
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块。