Entity Frameworkを持つ熱心なロード集計のルーツ
-
13-09-2019 - |
質問
私は必要なエンティティツリーのロードに、より構造的なアプローチを作成したいと思います:
私は、データの深刻な量を必要とするので、私はタイプセーフが含まれて使用してこれをやっている<のhref = "を(普通は含めるが、ラムダさんと)http://www.codetuning.net/blog/post/エンティティフレームワークは、コンパイル・安全Includes.aspx」のrel = "nofollowをnoreferrer">ここを示すようにます。
私が言ったように、は、私は1つの親項目の下で、基本的には全体のエンティティツリーを大量のデータを必要とします。
さて、私はこのような何かを行うことができます
context.House
.Include(x => x.Doors)
.Include(x => x.Doors.FirstOrDefault().Joint)
.Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory)
.Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory.JointType)
.Include(x => x.Windows)
// ... same thing
.Include(x => x.Roof)
// ... same thing
あなたが見ることができるように、で満たされ、このラインは非常に巨大な得ることができます含まれています。これは、実際には(BTW家が含まれていない)実際のコード
の非常に簡略化されたサンプルでありますそれでは、私がやりたいことは、ツリー内の支店の責任方法を、作成しています。どこの方法は、オブジェクトクエリを受け入れ、子供が含まれ、その順番に、「児童・ローダーのメソッド」を呼び出すことができます。また、親は、それが子供の種類と性質を持っているとして、問題ではないはずます。
これはおそらく、それほど意味がありません。
public void LoadHouse(int id)
{
// ...
ObjectQuery<House> query = context.House;
// and now?
LoadDoors(query, x => x.Door);
}
public void LoadDoors<T>(ObjectQuery<T> query, ..?..)
{
// ... ?
LoadJoints(...)
}
のように。しかし、私は本当に...それのまわりで私の頭を取得することはできません、着信クエリ間のミッシングリンクがありますし、子どものメソッドを呼び出します。
は、誰もがこのような何かをやっていますか?それとも誰も私にいくつかのポインタを与えることができる?
解決
の代わりにこのような何かを試してみてください。
クエリ= LoadDoors(クエリ、X => x.Door);
LOADXインクルード呼び出した結果を返します。