0

指定された基準に基づいて学校のリストを取得する次のクエリがあります。注: このデータベースは非常に大きく、10,000 件以上のレコードがあります。最終結果は 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 アプリケーションです。

4

1 に答える 1

0

エンティティ全体を選択する代わりに、必要なものだけの投影を選択します。

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

関連項目: Entity Framework でのクエリ プロジェクションの意味

于 2013-06-25T19:41:42.477 に答える