2016-10-17 18 views
2

私は、これらのクラスを持っている:多対多で自己参照(再帰)関係を行うにはどうすればいいですか?

MenuComponent 
MenuContainer 

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

    } 

} 
+0

可能な重複:http://stackoverflow.com/q/9640000/861716

だからあなたのクラスは次のようになります。 –

答えて

0

メニューはesentially木です。 MenuComponentはノードの等価物になります。各ノードは、子として他のMenuComponentを持つことができます。ルートMenuComponentの最上位ストレージとして使用しない限り、私は実際にMenuContainerの必要性を見ません。

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

public class MenuComponent 
{ 
    .... 
    public ICollection<MenuComponent> ChildMenus { get; } 
} 
関連する問題