2009-08-05 10 views
2

Ich habe eine selbst referenzierende Tabelle mit dem Namen Kategorien, die eine Parentcategoryid-Spalte hat, die Nullable ist.ADO-Entität hierarchische Selbstreferenzierung

Als ich die Tabelle dem Entity Designer hinzugefügt habe, hat sie zwei Navigationseigenschaften für diese Beziehung erstellt und ich nannte eine ParentCategory (die Null oder 1 Nav Prop) und die andere nannte ich SubCategories (die * viele Nav Prop).

Alles funktioniert gut, außer wenn ich mehr als eine Ebene tief gehe, nimmt es nicht die tieferen Ebenen auf.

So bekomme ich alle Category.SubCategories, aber ich bekomme nicht die Kategorien unter den Unterkategorien.

Fehle ich etwas? Ich denke, ich hätte mit NHibernate weitermachen sollen. Sollten die tieferen Ebenen nicht faul geladen werden?

return from c in _entities.ContentCategorySet.Include("SubCategories")  
      where c.ParentCategory == null 
      orderby c.Importance, c.Title 
      select c; 

Antwort

1

So würde ich mir die SubCategories-Eigenschaft vorstellen, sich zu verhalten.

Stufe 1

++ Stufe 2

++ Stufe 2

++ ++ Ebene 3

Wo Unterkategorien Eigentum der Stufe 1 nur Stufe 2 Artikel zurückgibt. Um auf Level 3 zu gelangen, würden Sie auf die konsekutiven Level-2-Elemente in einer rekursiven Methode zugreifen.

+0

Ich denke, du hast recht, ich dachte, es sollte eine gewisse Einheit Magie dort sein, aber ya Ich werde sie selbst bauen. – MvcCmsJon

+0

Ich habe bereits eine rekursive Methode. Das Problem ist, dass andere Kategorien nicht in die Entität geladen werden. Sie sagen, ich muss nach den tieferen Knoten suchen, um die Entität zu erstellen? Ich will nur sicher sein, dass ich verstehe. Es scheint, als sollte dies etwas sein, das faul geladen werden kann. – MvcCmsJon

+0

Hier ist meine Linq Rückkehr von c in _entities.ContentCategorySet.Include ("Unterkategorien") wo c.ParentCategory == null orderby c.Importance, c.Title wählen c; – MvcCmsJon

1

OK, zumindest einen Teil des Problems ist

where c.ParentCategory == null 

Wenn ich entfernen, dass ich die tieferen Ebene, aber dann hat Unterkategorien auf der obersten Ebene. Ich schätze, ich kann sie im Nachhinein herausfiltern.