質問

私は必要なエンティティツリーのロードに、より構造的なアプローチを作成したいと思います:

私は、データの深刻な量を必要とするので、私はタイプセーフが含まれて使用してこれをやっている<の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インクルード呼び出した結果を返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top