Sobes.tech
Middle

Как се извършва зареждането на свързани същности в C#;

sobes.tech AI

Отговор от AI

Зареждането на свързани същности в C# често се извършва с помощта на ORM библиотеки като Entity Framework Core. Основните подходи:

  • Еager (нетърпеливо) зареждане: Свързаните данни се зареждат заедно с основната същност в една заявка към базата данни.
    // Използване на метода 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.

Изборът на метод зависи от сценария на използване и компромиса между производителността (броя на заявките) и обема на заредените данни.