ObjectDisposedException使用Include时 - 为什么?

时间:2013-04-01 17:13:15

标签: asp.net entity-framework-4.1

我的页面调用使用通用存储库“查找”方法的服务层方法。在服务层方法中,我执行以下操作:

 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对象。我不明白为什么这不像我预期的那样有用。

1 个答案:

答案 0 :(得分:1)

您在哪里使用Func<>代替Expression<Func<>>。这使它成为Linq-to-objects。这种变化是永久性的。调用AsQueryable并不会再次使Linq成为实体。