自己参照テーブルを積極的にロードする

c# entity-framework hierarchical-data

質問

Categories標準的な自己参照テーブルがあります。私のエンティティモデルでは、関連付けをChildrenParent 。遅延読み込みをせずにCategoryオブジェクト全体を読み込むことは可能ですか?

以下のコードを使用すると、2番目のレベルまでしかロードされません。

db.Categories.MergeOption = System.Data.Objects.MergeOption.NoTracking;

var query = from c in db.Categories.Include("Children")
            where c.IsVisible == true
            orderby c.SortOrder, c.Id
            select c;

すべてのカテゴリオブジェクトがすでにロードされている場合、参照をロードすることは可能ですか?

ロードする方法の1つは、 Childrenプロパティを複数回追加することです。

db.Categories.Include("Children.Children.Children.Children.Children")

しかし、これは非常に長い非常識なT-SQLコードを生成し、それはまた私が望むことをしません。

受け入れられた回答

いいえ、できません。以下の点を考慮してください。すべてのLINQ to EntitiesクエリはSQLに変換されます。自己参照階層に無制限の深さが含まれているSQLステートメントはどれですか?標準SQLにはありません。 T-SQLにこれのための拡張があるなら、私はそれが何であるかわかりません、そして私もEFプロバイダーがするとは思わない。


人気のある回答

さて、あなたはLoadメソッドの使用を検討するかもしれません。

 if (!category.Children.IsLoaded)
        category.Children.Load();

もちろん、カテゴリエンティティはObjectContextによって追跡される必要があります。

ここではより良い説明があります- エンティティ - フレームワーク - 再帰的階層の取り扱い - インクルード - する - する - しない - to



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ