9

我有一个标准的自引用表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 代码,而且它也没有做我想要的。

4

3 回答 3

1

好的,您可以考虑使用 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

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

于 2009-09-14T14:15:52.637 回答
0

我用来实现的一种方法是,如果我有多个实体,我想在自引用表中获取所有子项是使用递归 cte存储过程来使用 Entity FrameWork 获取它们的 id: 这是使用 Entity Framework 和代码的代码方法

于 2018-02-20T14:16:46.810 回答