急切加载自引用表

时间:2009-09-11 18:26:05

标签: 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代码,而且它也没有做我想要的。

3 个答案:

答案 0 :(得分:1)

好的,您可以考虑使用Load方法。

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

当然,需要通过ObjectContext跟踪类别实体。

这里有更好的解释how-does-entity-framework-work-with-recursive-hierarchies-include-seems-not-to

答案 1 :(得分:1)

不,这是不可能的。考虑:所有LINQ to Entities查询都被转换为SQL。哪个SQL语句在自引用层次结构中包含无限深度?在标准SQL中,没有一个。如果在T-SQL中有这样的扩展,我不知道它是什么,我也不认为EF提供商会这样做。

答案 2 :(得分:0)

我曾经习惯实现的一种方法,如果我有多个实体,我想让自我引用表中的所有孩子都使用 recursive cte 存储过程来使用Entity FrameWork获取其ID: Here is the code using Entity Framework and code first approach