2013-04-01 22 views
0

我的页面调用一个使用Generic Repository“Find”方法的服务层方法。在服务层的方法,我做到以下几点:ObjectDisposedException使用Include时 - 为什么?

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 
         } 
        } 
       } 

我的资料库查找方法:

public IQueryable<T> Find(Func<T, bool> predicate) 
     { 
      return _objectSet.Where<T>(predicate).AsQueryable(); 
     } 

在页面上,我尝试访问运营商的cmn_address导航属性和我出现以下错误:

ObjectContext实例已被处置,不能再用于需要连接的操作。

我意识到,这是由using语句引起的处置方面,但我认为包括方法急于负荷cmn_Address对象。我不明白为什么这不像我预期的那样工作。

回答

1

你在你的WHERE条件使用Func<>,而不是Expression<Func<>>。这使它成为Linq对象。这种改变是永久的。调用AsQueryable不会使其再次成为Linq-to-entities。

+0

+1因为你是实体框架的教父,你摇滚! –

相关问题