2

I have these classes:

MenuComponent
MenuContainer

A MenuContainer can be seen as a menu. A menu has many elements. But a menu can be contained by another menu.

I want to persist this but I'm not getting how would be best:

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

    }

}
JorgeeFG
  • 5,651
  • 12
  • 59
  • 92

1 Answers1

0

Menus are esentially trees. Your MenuComponent would be the equivalente of a node. Each node can have other MenuComponents as children. I don't really see the necesity of MenuContainer unless you want to use it as a top level storage of root MenuComponents.

So your classes would look like:

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

public class MenuComponent
{
     ....
     public ICollection<MenuComponent> ChildMenus { get; }
}
InBetween
  • 32,319
  • 3
  • 50
  • 90