2014-07-05 3 views
2

Voici une version simplifiée d'une hiérarchie de classes que j'utilise avec entity framework. Par conséquent, un questionnaire comporte une série de questions et chaque question peut avoir sa propre collection de questions enfant. Le problème auquel je suis confronté est que lorsque je récupère un questionnaire de la base de données, l'ensemble des questions qu'il contient comprend toutes les questions associées à ce questionnaire, y compris celles qui sont imbriquées dans d'autres questions.Entity Framework 6 - Gestion du chargement des objets imbriqués

Les questions elles-mêmes contiennent correctement des références à leurs questions enfants.

En ce moment je suis en train de contourner le problème en supprimant tous les Questions de la collection Questionnaire.QuestionsParentQuestionId != null.

Existe-t-il un moyen de dire à Entity Framework d'inclure uniquement dans Questionnaire.Questions les Questions qui ont une valeur nulle ParentQuestionId?

Répondre

3

Dans votre contrôleur:

Questionnaire questionnaire = 
    db.QuestionnaireDBSet 
     .Include(x => x.Questions.Where(q => q.ParentQuestionId == null)) 
     .FirstOrDefault(x => x.Id == id); 

est votre Supposant db QuestionnaireDBContext ...

EDIT: Comme l'OP dit, il semble que nous ne pouvons pas filtrer en utilisant Inclure. Donc, la réponse ci-dessus ne fonctionnerait que dans un monde parfait. Mais maintenant, vous devriez essayer quelque chose comme ceci:

Questionnaire questionnaire = 
    db.QuestionnaireDBSet 
     .Include(x => x.Questions) 
     .Where(x => x.Questions.Any(q => q.ParentQuestionId == null)) 
     .FirstOrDefault(x => x.Id == id); 

Je n'ai aucun environnement de test, je ne peux que vous donner quelques suggestions.

+0

ou devrait-il être! = Null? –

+0

@philsoady "qui ont un null 'ParentQuestionId'" sayd l'OP – Oliboy50

+0

oui, après l'avoir lu à nouveau –

Questions connexes