J'ai une structure d'entités 'Dossier'. Chaque dossier a une référence à son dossier parent, permettant une arborescence standard. Chaque dossier peut également contenir une collection d'éléments, appelons-les 'Articles'. Un article a un titre et un corps. Étant donné l'ID d'un dossier racine, je souhaite récupérer tous les sous-dossiers et leurs articles. Cependant, je veux seulement récupérer le titre de l'article, pas son corps. J'ai l'intention d'afficher la structure du dossier dans une arborescence et je souhaite récupérer l'article complet uniquement si l'utilisateur sélectionne l'article dans l'arborescence.Récupérer des données de manière hiérarchique dans Entity Framework
J'ai mis en place les relations comme si:
public class Folder: EntityBase
{
public string Name { get; set; }
public Guid ParentId { get; set; }
[ForeignKey(nameof(ParentId))]
public Folder Parent { get; set; }
public ICollection<Folder> Folders { get; set; }
public ICollection<Article> Articles { get; set; }
}
public class Article : EntityBase
{
public Guid FolderId { get; set; }
[ForeignKey(nameof(FolderId))]
public Folder Folder { get; set; }
// this needs to appear in the list
public string Title { get; set; }
// potentially large amount of data, retrieve only as necessary
public string Body { get; set; }
...
}
Ce que je ne peux pas comprendre est comment dire Entity Framework pour aller récursive dans tous les sous-dossiers et leurs sous-dossiers et ainsi de suite. Dois-je implémenter la récursivité dans mon code? Cela semble un peu inefficace. Y a-t-il un moyen préféré de gérer cela? En outre, comment est-ce que je récupère juste le champ de titre de mes articles, pas le corps entier?
LINQ + récursivité ... à nouveau. –
Pourriez-vous élaborer sur ce commentaire? Je ne suis pas sûr de son intention. – Shaggydog
Avec un petit jeu de mots, j'ai essayé de dire que les questions sur LINQ et la récursivité sont posées à maintes reprises. Désolé de laisser un peu de cynisme prendre le dessus sur moi. Il n'y a pas de solution miracle et il n'y a certainement pas de déclaration d'une seule ligne. –