9

の標準的な自己参照テーブルがあり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;

すべてのカテゴリ オブジェクトが既に読み込まれている場合、参照を読み込むことはできますか?

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

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

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

4

3 に答える 3

1

OK、Loadメソッドの使用を検討してください。

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

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

ここには、how-does-entity-framework-work-with-recursive-hierarchies-include-seems-not-toのより良い説明があります。

于 2009-09-14T07:50:24.220 に答える
1

いいえ、できません。考慮事項:すべてのLINQtoEntitiesクエリはSQLに変換されます。自己参照階層に無制限の深さを含むSQLステートメントはどれですか?標準SQLにはありません。T-SQLにこれに対する拡張機能がある場合、それが何であるかはわかりません。また、EFプロバイダーもそうは思いません。

于 2009-09-14T14:15:52.637 に答える
0

自己参照テーブルにすべての子を取得したいいくつかのエンティティがある場合に実装するために使用した1つの方法は、再帰cteストアドプロシージャを使用して、エンティティフレームワークを使用してIDを取得することです: アプローチ

于 2018-02-20T14:16:46.810 に答える