C# 如何与多-多建立自我参照(自反)关系?

C# 如何与多-多建立自我参照(自反)关系?,c#,entity-framework-core,C#,Entity Framework Core,我有以下课程: MenuComponent MenuContainer 菜单容器可以看作是菜单。菜单有很多元素。但是一个菜单可以包含在另一个菜单中 我想坚持这一点,但我不知道怎样做才是最好的: namespace menu_builder_rbac { public abstract class MenuComponent { [Key] public int MenuComponentId { get; set; } public

我有以下课程:

MenuComponent
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; }

    }

}
名称空间菜单\u生成器\u rbac{
公共抽象类MenuComponent{
[关键]
public int MenuComponentId{get;set;}
公共字符串DisplayName{get;set;}
公共字符串名称{get;set;}
公共字符串HtmlId{get;set;}
公共字符串HTMLCSCLASS{get;set;}
公共字符串Url{get;set;}
公共字符串IconUrl{get;set;}
公共布尔等于(MenuComponent MenuComponent){
返回(this.MenuComponentId==menuComponent.MenuComponentId)| |(this.Name==menuComponent.Name);
}
}
公共类菜单容器:菜单组件{
公共ICollection菜单组件菜单容器{get;set;}
}
}

菜单本质上是树。您的
MenuComponent
将相当于一个节点。每个节点都可以将其他
MenuComponent
s作为子节点。我并不认为有必要使用
MenuContainer
,除非您想将其用作root
MenuComponent
s的顶级存储

因此,您的类将如下所示:

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

public class MenuComponent
{
     ....
     public ICollection<MenuComponent> ChildMenus { get; }
}
公共类菜单容器
{
公共ICollection菜单{get;}
}
公共类菜单组件
{
....
公共ICollection子菜单{get;}
}
可能的重复: