2009-08-05 7 views
2

J'ai une table auto-référencée nommée categories dont la colonne parentcategoryid est nullable. Lorsque j'ai ajouté la table au concepteur d'entité, elle a créé deux propriétés de navigation pour cette relation et j'ai nommé une ParentCategory (le prop 0 ou 1) et l'autre SubCategories (le * prop de plusieurs nav).Auto-référencement hiérarchique ADO Entité

Tout fonctionne très bien, sauf quand je vais plus d'un niveau de profondeur, il ne prend pas les niveaux les plus profonds.

Donc, je reçois toutes les catégories.SubCategories mais je ne reçois pas les catégories dans les sous-catégories.

Ai-je raté quelque chose? commencer à penser que je devrais avoir bloqué avec NHibernate. Les niveaux les plus profonds ne devraient-ils pas être paresseux?

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

Répondre

1

Voilà comment j'imagine la propriété SubCategories à se comporter.

Niveau 1

++ Niveau 2

++ Niveau 2

++ ++ Niveau 3

Où propriété de niveau Sous-catégories 1 ne retourne niveau 2 articles. Ensuite, pour accéder au niveau 3, vous accéderez aux éléments de niveau 2 consécutifs, selon une méthode récursive.

+0

Je suppose que vous avez raison, je pensais qu'il devrait y avoir un peu de magie de l'entité, mais il y a je vais devoir les construire moi-même. – MvcCmsJon

+0

J'ai déjà une méthode récursive. Le problème est que les autres catégories ne sont pas chargées dans l'entité. Vous dites que je dois aller chercher les nœuds les plus profonds pour construire l'entité? Je veux juste être sûr de comprendre. Il semble que ce devrait être quelque chose qui peut être paresseux chargé. – MvcCmsJon

+0

Voici mon LINQ retour de c dans _entities.ContentCategorySet.Include ("") Sous-catégories où c.ParentCategory == null orderby c.Importance, c.Title select c; – MvcCmsJon

1

OK, au moins une partie du problème est

where c.ParentCategory == null 

Quand je retire ce que j'obtenir les niveaux plus profonds, mais alors les sous-catégories au niveau supérieur. Je suppose que je peux juste les filtrer après le fait.