3

必要なエンティティ ツリーをロードするための、より構造化されたアプローチを作成したいと思います。

かなりの量のデータが必要なので、ここに示すように、タイプ セーフなインクルード (通常のインクルードですが Lambda を使用) を使用してこれを行っています

私が言ったように、基本的には 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

ご覧のとおり、インクルードで満たされたこの行は非常に大きくなる可能性があります。実際、これは実際のコードの非常に単純化されたサンプルです (住宅は含まれていません)。

だから私がやりたいのは、ツリー内のブランチを担当するメソッドを作成することです。メソッドがオブジェクトクエリを受け入れて子を含めることができる場所で、次に「子ローダーメソッド」を呼び出します。また、子の型を持つプロパティがある限り、親は重要ではありません。

これはおそらくあまり意味がありません:

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


}

等々。しかし、私は本当にそれを理解することはできません... 着信クエリと子メソッドの呼び出しとの間にリンクがありません。

誰かがこのようなことをしましたか?または、誰かが私にいくつかの指針を与えることができますか?

4

1 に答える 1

2

代わりに次のようなものを試してください。

query = LoadDoors(query、x => x.Door);

LoadXは、Includeを呼び出した結果を返します。

于 2009-06-12T16:43:53.893 に答える