EF code-première: Comment charger des données associées (parent-enfant-petit-enfant)?
J'ai cette entité:
public class DynamicPage {
public int PageId { get; set; }
public int Order { get; set; }
public string MenuText { get; set; }
public string MenuHover { get; set; }
public int? ParentId { get; set; }
public virtual DynamicPage Parent { get; set; }
public virtual ICollection<DynamicPage> Children { get; set; }
}
Cette entité peut avoir 3 niveau: Parent -> Enfant -> petit-enfant. Comment puis-je charger le Parent (niveau 1) de pentecôte tous les enfants (niveau 2) et, pour chaque enfant, associé à un petit-enfant (niveau 3) le cas échéant? Grâce à l'aide.
OriginalL'auteur javad amiry | 2011-09-22
Vous devez vous connecter pour publier un commentaire.
EF 4.1 de la fonctionnalité et de la syntaxe:
GrandChildren
. Entendez-vous ce code:Include(p => p.Children.Select(c => c.Children))
?Oui. En fait, ce que j'ai écrit comme
GrandChildren
peut être n'importe quelle propriété de navigation de collecte ou de référence. Le modèleInclude(x => x.SomeCollection.Select(c => c.SomeNavigationProperty))
des causes justes unInclude
pour le niveau suivant. Vous pouvez le répéter à l'infini:Select
sur les collections, simple pointillés tracés sur des références.Merci, juste quelques minutes, je l'ai tester merci
OK, cela fonctionne correctement 😀 merci beaucoup. Continue j'ai besoin de commander les enfants (et grands enfants) lors de l'extraction. Je vais modifier votre réponse et de mettre mon premier code, et le code final créé par vos conseils pour expliquer mon problème. Merci de m'aider à compléter la solution. Un merci spécial à prêter attention à la question. Ce qui concerne
Non, il n'a pas changé. L'expression de la surcharge de
Include
est toujours là. Assurez-vous que vous avez inclususing System.Data.Entity;
dans votre fichier source.OriginalL'auteur Slauma
Si vous voulez vous rendre la vie facile sur vous-même, suivez les EF Code Premières conventions de nommage de votre Id de table tout simplement
Id
(ou, à défaut, le nom de la table +Id
, par exemple,DyanmicPageId
).Cela devrait vous laisser avec quelque chose comme ceci:
Ensuite, vous devez définir la relation entre les parents et les enfants explicitement dans un
OnModelCreating
méthode dans votreDbContext
classe.Vous pouvez ensuite sélectionner les enfants ou petits-enfants:
Qu'entendez-vous par "charge"? Entendez-vous choisir?
Charger à partir de la base de données, extraction de db, sélectionnez. Comme ceci:
entity.DynamicPages.Where(d => d.ParentId == null).Include(d => d.Children).ToList();
je le sais, mais je veux chargerd.Children.Children
que je ne peux pas ):Mise à jour de ma réponse. J'espère que c'est ce que vous cherchez.
Maintenant que je vois Slauma réponse, je reçois à ce que vous recherchez. Et j'ai aussi appris quelque chose, donc pas de problème.
OriginalL'auteur devuxer