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

时间:2013-07-26 17:31:31

标签: asp.net-mvc entity-framework asp.net-mvc-4

所以我对查询有这个小问题我必须返回一个项目列表。这是查询:

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

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

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

这很奇怪,因为我在其他地方有完全相同的代码片段而且效果很好!我应该补充一点,我正在使用MVC 4和Entity Framework,这是一个Web Api控制器(或者是从Web Api派生的)。我已经研究过并且听说我可以做Lazy Loading,但我不确定它是如何工作的。

我感谢所有人的帮助!

2 个答案:

答案 0 :(得分:1)

错误表明您已经处置了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...

答案 1 :(得分:0)

出于某种原因,上述查询无法正常工作,我尝试的其他所有内容都以相同的方式工作(对象被处理掉)。所以我决定使用附加的查询。它不是一个“解决方案”,但它确实完成了工作。感谢您的帮助:

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();