EF4 извлекает много ко многим одним звонком - PullRequest
0 голосов
/ 08 февраля 2011

Представьте себе простую базу данных, где у студентов есть несколько курсов и несколько экзаменов, учитывая список студентов, уже загруженных из БД, я хочу заполнить списки курсов и экзаменов одним вызовом базы данных для каждого.

Я знаю, что могу использовать функцию «Включить заранее», что приводит к одному вызову, чтобы получить все:

var students = context.Students.Include("Courses").Include("Exams").ToList();

но мне также нужно иметь возможность загружать курсы и экзамены позднее.

Я пытался:

var courses = students.SelectMany(x => x.Courses).ToList();
var exams = students.SelectMany(x => x.Exams).ToList();

но это привело к двум вызовам в дБ для каждого студента. Как я могу добиться этого более эффективно?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

Убедитесь, что вы отключили ленивую загрузку для своей модели Entity Framework, IIRC заставит эти свойства коллекции запускать запросы всякий раз, когда вы выполняете их. В противном случае похоже, что он должен работать только с одним запросом.

0 голосов
/ 08 февраля 2011

По моему опыту, вы не можете загрузить несколько коллекций EntityCollections одновременно.Вы предоставили два варианта в своем вопросе.Вы можете либо загружать связанные сущности в одном запросе, либо загружать их позже с помощью запроса для каждой загрузки EntityCollection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...