Цель Include () в ASP.NET MVC + Entity Framework - PullRequest
12 голосов
/ 10 сентября 2011

В контроллерах, сгенерированных Visual Studio, а также в примере приложения (ContosoUniversity), действие Index всегда имеет нечто вроде

var departments = db.Departments.Include(d => d.Administrator);

В чем разница между этим и

var departments = db.Departments;

Сначала я подозревал, что первый (с включением) позволяет представлению получить отдел. Администратор.Но второй (без включения), похоже, тоже может это сделать.

Ответы [ 4 ]

16 голосов
/ 10 сентября 2011

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

Код по-прежнему будет работать без включения, но при первом обращении к администратору отдела EF потребуется нажать на базу данных, чтобы загрузить ее (поскольку она не была предварительно загружена). Загрузка данных по требованию (лениво) - хорошая функция, но она может быть серьезной проблемой производительности (известной как проблема N + 1 ). Особенно, если вы обращаетесь к администратору для каждого отдела (например, в цикле) - вместо одного вызова базы данных у вас будет много!

3 голосов
/ 11 сентября 2011

См. Раздел «Ленивая, энергичная и явная загрузка связанных данных» в этом руководстве: http://www.asp.net/entity-framework/tutorials/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application

3 голосов
/ 10 сентября 2011

В первом случае (с включением), когда вы пишете department.Administrator серверы, объект из памяти был загружен из-за метода Include. Во втором случае будет выполнен оператор sql для извлечения записи администратора из базы данных для каждого объекта отдела.

2 голосов
/ 10 сентября 2011
var departments = db.Departments;

Эта команда извлекает совокупные домены, только если LazyLoadingEnabled включен и MultipleActiveResultSets имеет значение true в строке подключения.

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