Что такое Eager Loading в Entity Framework?

«Что такое Eager Loading в Entity Framework?» — вопрос из категории Entity Framework, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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).