1 votes

Entity Framework ne remplit pas le contexte

Je commence tout juste à explorer le cadre des entités, et je me suis dit qu'il était temps de voir ce dont tout le monde se plaignait. Je rencontre un problème où les entités ne semblent pas renvoyer le contexte de l'objet. J'ai généré le modèle à partir d'une base de données avec trois tables qui se lient les unes aux autres.

Courses
Instructors
CanTeach

Les relations sont telles que vous pouvez vous y attendre : un cours peut être lié à plusieurs entités CanTeach et un instructeur peut également être lié à plusieurs entités CanTeach. J'ai également ajouté un service OData à mon projet qui utilise le même modèle. Je peux donc exécuter des requêtes telles que

from a in CanTeach
where a.Instructor.FirstName == "Barry"
select new { Name = a.Instructor.FirstName + " " + a.Instructor.LastName,
   Course = a.Course.Name}

sans problème contre le point de terminaison OData en utilisant LINQPad. Cependant, lorsque j'effectue une requête simple comme

public Instructor GetInstructorFromID(int ID)
{
    return context.Instructors.Where(i => i.ID == ID).FirstOrDefault();
}

La liste CanTeach est vide. Je sais que tout dans EF est chargé paresseusement et qu'il est possible que mon contexte soit hors de portée au moment où je regarde le contexte de l'objet, mais même en essayant d'obtenir le contexte de l'objet dès que la requête est exécutée, le contexte de l'objet est vide.

Qu'est-ce que je fais de travers ?

Edita:

En plus de la réponse ci-dessous, j'ai trouvé que

return context.Instructors.Include("CanTeach").Where(i => i.ID == ID).FirstOrDefault();

a fonctionné pour ceux qui recherchent une API plus fluide.

0voto

Slartibartfast Points 7645

Cherchez le mot Inclure

from a in CanTeach.Include("Instructors")
where a.Instructor.FirstName == "Barry"
select new { Name = a.Instructor.FirstName + " " + a.Instructor.LastName,
            Course = a.Course.Name}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X