我的页面调用使用通用存储库“查找”方法的服务层方法。在服务层方法中,我执行以下操作:
using (IUnitOfWork unitOfWork = new DBContext())
{
GenericRepository<Operator> operatorRepos = new GenericRepository<Operator>(unitOfWork);
{
try
{
var oper = operatorRepos.Find(o => o.OperatorID == operatorID).Include(o => o.cmn_Address).Single();
return oper;
}
catch (InvalidOperationException exc)
{
//handle exception
}
}
}
我的存储库的Find方法:
public IQueryable<T> Find(Func<T, bool> predicate)
{
return _objectSet.Where<T>(predicate).AsQueryable();
}
在页面上,我尝试访问Operator的cmn_address Navigation属性,我收到以下错误:
ObjectContext实例已被释放,不能再用于需要连接的操作。
我意识到这是由使用语句来处理上下文引起的,但我认为Include方法会急切加载cmn_Address对象。我不明白为什么这不像我预期的那样有用。
答案 0 :(得分:1)
您在哪里使用Func<>
代替Expression<Func<>>
。这使它成为Linq-to-objects。这种变化是永久性的。调用AsQueryable
并不会再次使Linq成为实体。