2016-10-17 3 views
2

Ich habe diese Klassen:Wie man eine Selbstreferenzierung (reflexive) Beziehung mit vielen - vielen macht?

MenuComponent 
MenuContainer 

A MenuContainer kann als Menü zu sehen. Ein Menü hat viele Elemente. Aber ein Menü kann in einem anderen Menü enthalten sein.

Ich will das bestehen bleiben, aber ich bin nicht immer wie am besten wäre:

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

Mögliche doppelte: http://stackoverflow.com/q/9640000/861716 –

Antwort

0

Menüs sind esentially Bäume. Ihr MenuComponent wäre das Äquivalent eines Knotens. Jeder Knoten kann andere MenuComponent s als untergeordnete Elemente haben. Ich sehe nicht wirklich die Notwendigkeit von MenuContainer, wenn Sie es als Top-Level-Speicher von Root MenuComponent s verwenden möchten.

So würde Ihre Klassen wie folgt aussehen:

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

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