急切加載自引用表

c# entity-framework hierarchical-data

我有一個標準的自我參考表Categories 。在我的實體模型中,我已經建立了ChildrenParent協會。是否可以在沒有延遲加載的情況下加載整個Category對象?

如果我使用下面的代碼,它只加載到第二級。

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屬性

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跟踪類別實體。

這裡有更好的解釋如何實體框架 - 工作與遞歸 - 層次結構 - 包括 - 似乎沒有 -



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因