Что нужно, чтобы использовать Eager Loading в Entity Framework?

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

Ответ

Для использования Eager Loading в Entity Framework Core необходимо явно указать связанные сущности, которые нужно загрузить, с помощью метода Include(). Для загрузки цепочек связанных данных используется метод ThenInclude().

Ключевые моменты:

  • Include() — загружает связанные данные одного уровня.
  • ThenInclude() — загружает данные по цепочке отношений (например, свойства связанной сущности).
  • Один запрос — Eager Loading выполняется одним SQL-запросом с использованием JOIN, что эффективно, когда заранее известен полный набор необходимых данных.
  • Производительность — Позволяет избежать проблемы N+1 запроса, характерной для Lazy Loading.

Пример:

// Загружаем Orders, связанных с ними Customer, Address каждого Customer и коллекцию Items для каждого Order
var orders = context.Orders
    .Include(o => o.Customer)          // Eager Loading для Customer
    .ThenInclude(c => c.Address)       // Eager Loading для Address у Customer
    .Include(o => o.Items)             // Eager Loading для коллекции Items
    .ToList();

Практический совет: Следите за формированием итогового SQL-запроса (например, через ToQueryString() или профилировщик). Слишком большое количество Include может привести к избыточному объему данных (cartesian explosion) и снижению производительности. В таких случаях рассмотрите разделение запроса или использование Explicit Loading.