【发布时间】:2013-08-09 15:28:17
【问题描述】:
我最近开始使用受http://www.codethinked.com/keep-your-iqueryable-in-check 启发的 IQueryable。所以我已经习惯在我的 repos 中这样做了:
public IEnumerable<POCO> GetById(int id)
{
using (var ctx = new DbContext())
{
var query = from ...;
return query.ToList();
}
}
现在我正在这样做:
public IPageable<POCO> GetById(int id)
{
var ctx = new DbContext()
var query = from ...;
return new Pageable(query);
}
但我想知道这是否是处理new DbContext() 的最佳方式。
将DbContext 放置为班级成员会更好吗
public class Repo
{
private DbContext _ctx = new DbContext();
}
甚至注入它
public class Repo
{
private DbContext _ctx;
public Repo(DbContext ctx)
{
_ctx = ctx;
}
}
有什么好处和坏处:
- 每个方法中都有一个
new DbContext。 - 每个对象(类成员)一个
new DbContext。 - 注入
DbContext。
我正在使用 Ninject,所以我可以使用 .InRequestScope();(如果这会影响答案)
还有几个问题:
- 如果 DbContext 保留为类,我的 repo 是否应该实现 IDisposable 成员?
- 还有比上述方法更好的处理 DbContext 的方法吗?
【问题讨论】:
标签: asp.net-mvc entity-framework iqueryable