私はCategories
の標準自己参照テーブルを持っています。私のエンティティモデルでは、私は団体をChildren
とParent
としました。レイジーローディングなしで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;
すべてのカテゴリオブジェクトが既に読み込まれている場合は、参照を読み込むことはできますか?それをロードする
一つの方法は、複数回に
db.Categories.Include("Children.Children.Children.Children.Children")
をChildren
プロパティを追加することですが、これは非常に長い非常識なT-SQLコードを生成しても、それは私がやりたいことはありません。
しかし、 "SELECT * FROM Categories"というクエリを実行すると、テーブル全体がロードされ、すべての親カテゴリと子カテゴリがロードされているため、すべてが1つのテーブルに格納されています。この場合、この読み込まれたレコードを参照プロパティに割り当てることはあまり複雑ではありませんか? –
実際にテーブル全体を反復した場合、すべてのオブジェクト*はメモリに格納され、*インクルードの有無にかかわらず*修正*されます。しかし、あなたがテーブルの最後のレコードに到達するまで、それは起こりません。関連するオブジェクトが反復する*最初のレコードにそこに存在することを保証します。 –
"自己参照階層に無制限の深さを含むSQL文はありますか?" - > T-SQLの共通テーブル式 –