【发布时间】:2012-09-25 11:20:56
【问题描述】:
我们有一个使用 Entity Framework 4.0 的 Web 应用程序。不幸的是,当大量用户点击应用程序时,EF 会抛出错误 底层提供程序在打开时失败
下面是sn-p的代码:
//DAL
public IQueryable<EmployeeEntity> GetEmployeeDetail()
{
DatabaseEntities ent = new DatabaseEntities(this._connectionString);
IQueryable<EmployeeEntity> result = from employee in ent.EmployeeEntity
select employee;
return result;
}
请注意上面的代码返回 IQuerable。
- 上述模式有什么问题会导致异常发生吗?
- Entity Framework 何时以及如何确定关闭/打开数据库连接以及保留多长时间?
- 在什么情况下会出现上述错误?
- EF 连接池的最大数量是多少,如何配置?
- 我们是否需要明确指定打开和关闭
- 下面的代码是解决上述问题的最佳方法吗?
public IQueryable<EmployeeEntity> GetEmployeeDetail()
{
using (DatabaseEntities ent = new DatabaseEntities(this._connectionString))
{
IQueryable<EmployeeEntity> result = from employee in ent.EmployeeEntity
select employee;
return result.ToList().AsQuerable();
}
}
【问题讨论】:
-
是否有特定原因返回
IQueryable<T>而不是IEnumerable<T>? -
@RePierre,感谢您的回复。 IT 现有代码,无法更新。无论如何,会有什么区别?
-
区别就在这里stackoverflow.com/a/2876655/844006。我之所以问,是因为我认为如果您将实体容器包装在
using语句中并将结果公开为IQueryable<T>,您会遇到一些问题;稍后有人可能会执行GetEmployeeDetail().Where(e=>e.Id == id)之类的操作,并且执行该查询可能会出现一些问题,因为数据上下文对象将被释放。 -
如果有人做了 GetEmployeeDetail().Where(e=>e.Id == id) 那么结果将在内存中可用。这就是 ToList().AsQuerable() 的全部目的
标签: entity-framework c#-4.0 linq-to-sql