如何与许多人进行自我引用(反身)关系?

时间:2016-10-17 18:02:32

标签: c# entity-framework-core

我有这些课程:

MenuComponent
MenuContainer

可以将MenuContainer视为菜单。菜单有很多元素。但是菜单可以包含在另一个菜单中。

我想坚持这一点,但我没有得到最好的方式:

namespace menu_builder_rbac {

    public abstract class MenuComponent {

        [Key]
        public int MenuComponentId { get; set; }

        public string DisplayName { get; set; }

        public string Name { get; set; }

        public string HtmlId { get; set; }

        public string HtmlCssClass { get; set; }

        public string Url { get; set; }

        public string IconUrl { get; set; }

        public bool Equals(MenuComponent menuComponent) {
            return (this.MenuComponentId == menuComponent.MenuComponentId) || (this.Name == menuComponent.Name);
        }

    }

    public class MenuContainer : MenuComponent {

        public ICollection<MenuComponent> MenuComponentMenuContainer { get; set; }

    }

}

1 个答案:

答案 0 :(得分:0)

菜单实际上是树木。您的MenuComponent将是节点的等效项。每个节点可以有其他MenuComponent作为子节点。除非您想将其用作根MenuContainer的顶级存储空间,否则我不会真正看到MenuComponent的必要性。

所以你的课程看起来像:

public class MenuContainer
{
     public ICollection<MenuComponent> Menus { get; }
}

public class MenuComponent
{
     ....
     public ICollection<MenuComponent> ChildMenus { get; }
}