Ответ
Eager Loading (жадная загрузка) — это стратегия загрузки связанных сущностей в Entity Framework, при которой все необходимые данные извлекаются из базы данных одним запросом с использованием оператора JOIN. Это достигается с помощью метода Include() (и ThenInclude() для вложенных связей).
Пример: Загрузка заказов вместе с клиентами и позициями заказа.
using (var context = new AppDbContext())
{
var orders = context.Orders
.Include(o => o.Customer) // Жадная загрузка Customer
.Include(o => o.OrderDetails) // Жадная загрузка коллекции OrderDetails
.ThenInclude(od => od.Product) // Вложенная загрузка Product для каждой позиции
.Where(o => o.Date > DateTime.Now.AddDays(-7))
.ToList();
}
Плюсы:
- Решает проблему N+1 запроса. Без Eager Loading EF выполнил бы один запрос для списка заказов и по отдельному запросу для каждой связанной сущности (Customer, OrderDetails), что крайне неэффективно.
- Предсказуемость: все данные загружаются сразу, нет отложенных запросов к БД.
Минусы:
- Может привести к избыточной загрузке данных, если связанные сущности не нужны в конкретном сценарии.
- Запрос может стать сложным и тяжелым при большом количестве
Include.
Когда использовать: Когда вы заранее знаете, что связанные данные понадобятся для обработки. В противном случае рассмотрите Explicit Loading (явная загрузка) или Projection (селекция в анонимный тип/DTO).