Sobes.tech
Middle
115
questionbank

Как происходит загрузка связанных сущностей в C#?

Answer from AI

sobes.tech AI

Загрузка связанных сущностей в C# часто осуществляется с помощью ORM-библиотек, таких как Entity Framework Core. Основные подходы:

  • Нетерпеливая (Eager) загрузка: Связанные данные загружаются вместе с основной сущностью в одном запросе к базе данных.
    // Использование метода Include для нетерпеливой загрузки
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Явная (Explicit) загрузка: Связанные данные загружаются явно после получения основной сущности.
    // Получение основной сущности
    var post = context.Posts.Find(1);
    
    // Явная загрузка связанных комментариев
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Для одиночных навигационных свойств используется .Reference() вместо .Collection().
    // Явная загрузка связанного автора
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Ленивая (Lazy) загрузка: Связанные данные загружаются автоматически при первом обращении к ним. Требует настройки прокси-классов или внедрения зависимостей и является поведением по умолчанию в некоторых ORM.
    // При включенной ленивой загрузке
    var post = context.Posts.Find(1);
    // Обращение кComments вызывает загрузку
    int commentCount = post.Comments.Count;
    
    В Entity Framework Core необходима установка пакета Microsoft.EntityFrameworkCore.Proxies и вызов .UseLazyLoadingProxies() в конфигурации DbContext. Навигационные свойства должны быть объявлены как virtual.

Выбор метода зависит от сценария использования и компромисса между производительностью (количеством запросов) и объемом загружаемых данных.