我最近开始使用受http://www.codethinked.com/keep-your-iqueryable-in-check启发的 IQueryable 。所以我已经习惯在我的回购中这样做:
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;
}
}
有什么好处和坏处:
- a
new DbContext
在每种方法中。 - 每个
new DbContext
对象(类成员)。 - 注射
DbContext
.
我正在使用 Ninject,所以我可以使用.InRequestScope();
(如果这会影响答案)
其他几个问题:
- 如果 DbContext 保留为类成员,我的 repo 是否应该实现 IDisposable?
- 有没有比上面更好的方法来处理 DbContext 的处置?