查询未返回结果(但结果存在,并且查询在不同的项目中工作)



所以我在查询时遇到了这个小问题,我必须返回一个项目列表。以下是查询:

 geographic = _iRepository.Geographics.Where(p => p.GeographID == ID)
                             .SingleOrDefault()
                             .Children
                             .SingleOrDefault()
                             .Children
                             .OrderBy(p => p.DisplayOrder).ThenBy(p => p.Name)
                             .ToList();

ID(以及GeographID)都是指南。问题是我的查询卡在==部分,这意味着它永远找不到匹配项。如果我在代码的这一部分设置了断点,在它退出后,它会给我以下错误:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection

这很奇怪,因为我在其他地方有完全相同的代码,而且它运行得很完美!我应该补充一点,我使用的是带有实体框架的MVC 4,这是一个WebApi控制器(或从WebApi派生而来)。我已经研究并听说我可以做Lazy Loading,但我不确定它是如何工作的。

我感谢所有的帮助!

错误表明您已经释放了DbContext对象。检查控制器代码。

也许这是使用脚手架创建控制器的原因。如果是这样,请检查控制器代码以找到以下内容:

protected override void Dispose(bool disposing)
    {
        db.Dispose();
        base.Dispose(disposing);
    }

删除它(不推荐)或将调用DbContext对象放在它之前。

或者你可以手动处理你的对象,或者通过using()子句声明你的对象等等。无论如何,这个错误是因为你在处理对象后调用了它。检查你的代码。。。

更新:

另一种猜测是:您似乎在查询中使用导航属性。如果是,在这种情况下,您应该包括您需要的任何NavPr。试试这样的东西:

geographic = _iRepository.Geographics.Include("NavPr1")
    .Include("NavPr2").Include("NavPr2.NavPr21")
    .Where(p => p.GeographID == ID)
    .SingleOrDefault()        
     // and the rest of query...

由于某些原因,上面的查询不起作用,而我尝试的其他一切都以相同的方式工作(对象被处理)。所以我决定使用附加的查询。这不是一个"解决方案",但它确实完成了任务。感谢所有的帮助:

geographic = (from g1 in _iEMARepository.Geographics
                             join g2 in _iEMARepository.Geographics
                                on g1.GeographID equals g2.ParentId
                            join g3 in _iEMARepository.Geographics
                                on g2.GeographID equals g3.ParentId
                             where g1.GeographID == ID
                              select g3).OrderBy(p => p.DisplayOrder).ThenBy(p => p.Name).ToList();

最新更新