查询很快返回所有结果,但当对JSON的调用由于加载了所有不必要的属性而超时时

本文关键字:加载 属性 超时 于加载 不必要 调用 结果 返回 很快 查询 JSON | 更新日期: 2023-09-27 18:20:03

我有以下查询,它根据提供的条件获取学校列表。注意:这个数据库非常非常大,有10000多条记录。最终结果是列出了188所学校,这正是我们所需要的。

return (from s in Context.Schools
        join d in Context.Districts on s.DistrictID equals d.DistrictID
        join r in Context.Rosters on s.SchoolID equals r.SchoolID
        join te in Context.TestEvents on r.TestEventID equals te.TestEventID
        join ta in Context.TestAdministrations on te.TestAdministrationID equals ta.TestAdministrationID
        join sr in Context.ScoreResults on r.RosterID equals sr.RosterID into exists
        from any in exists.DefaultIfEmpty()
        where d.DistrictID == DistrictID
        && ta.SchoolYearID == SchoolYearID.Value
        select s)
        .Distinct()
        .OrderBy(x => x.Name)
        .ToList();

问题是,当我们致电return Json(Schools, JsonRequestBehavior.AllowGet);将我们的学校送回客户时,操作超时。当深入代码时,由于某种原因,DbContext试图拉入该结果集的所有属性,包括我们不需要的属性。在这个Schools对象中,我已经从数据库中获得了所需的一切。为什么它要返回并开始创建所有关联的对象。有办法阻止这种情况吗?。

这是一个使用EF 5 Code First的MVC应用程序。

查询很快返回所有结果,但当对JSON的调用由于加载了所有不必要的属性而超时时

与其选择整个实体,不如只选择您需要的投影:

var results = from s in Context.Schools
    ...
    select new MyClassContainingOnlyAFewProperties {
                 Prop1 = s.Prop1,
                 Prop2 = s.Prop2, 
                 //etc.
    }
return results;

另请参阅:查询投影在实体框架中意味着什么?