我最近开始使用受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;
   }
}
有什么好处和坏处:
- anew DbContext在每种方法中。
- 每个new DbContext对象(类成员)。
- 注射DbContext.
我正在使用 Ninject,所以我可以使用.InRequestScope();(如果这会影响答案)
其他几个问题:
- 如果 DbContext 保留为类成员,我的 repo 是否应该实现 IDisposable?
- 有没有比上面更好的方法来处理 DbContext 的处置?