【问题标题】:ADO Entity hierarchical self referencingADO 实体分层自引用
【发布时间】:2009-08-05 07:23:38
【问题描述】:

我有一个名为 categories 的自引用表,它的 parentcategoryid 列可以为空。

当我将表添加到实体设计器时,它为此关系创建了两个导航属性,我将一个命名为 ParentCategory(零或 1 导航属性),另一个命名为 SubCategories(* many 导航属性)。

一切都很好,除了当我深入一层以上时,它不会进入更深的层次。

所以我得到了所有的 Category.SubCategories 但我没有得到子类别下的类别。

我错过了什么吗?开始认为我应该坚持使用 NHibernate。更深层次的不应该延迟加载吗?

    return from c in _entities.ContentCategorySet.Include("SubCategories")       
           where c.ParentCategory == null
           orderby c.Importance, c.Title
           select c;

【问题讨论】:

    标签: entity-framework ado.net entity


    【解决方案1】:

    这就是我想象的 SubCategories 属性的行为方式。

    1 级

    ++ 2级

    ++ 2级

    ++++ 3级

    其中级别 1 的 SubCategories 属性仅返回级别 2 项目。然后要到达第 3 级,您需要以递归方式访问连续的第 2 级项目。

    【讨论】:

    • 我想你是对的,我认为那里应该有一些实体魔法,但我必须自己构建它们。
    • 我已经有了递归方法。问题是它们的其他类别没有加载到实体中。你是说我需要去查询更深的节点来构建实体?只是想确定我理解。看起来这应该是可以延迟加载的东西。
    • 这是我在 _entities.ContentCategorySet.Include("SubCategories") 中从 c 返回的 linq,其中 c.ParentCategory == null orderby c.Importance, c.Title select c;
    【解决方案2】:

    好的,至少部分问题是

    where c.ParentCategory == null
    

    当我删除它时,我会得到更深的层次,但在顶层有子类别。我想我可以在事后过滤掉它们。

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多