Sobes.tech
Middle

Jak odbywa się ładowanie powiązanych encji w C#?

sobes.tech AI

Odpowiedź od AI

Ładowanie powiązanych encji w C# często odbywa się za pomocą bibliotek ORM, takich jak Entity Framework Core. Główne podejścia:

  • Ładowanie eager (z wyprzedzeniem): Powiązane dane są ładowane razem z główną encją w jednym zapytaniu do bazy danych.
    // Użycie metody Include do ładowania eager
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Ładowanie explicit (jawne): Powiązane dane są ładowane explicite po uzyskaniu głównej encji.
    // Uzyskanie głównej encji
    var post = context.Posts.Find(1);
    
    // Jawne ładowanie powiązanych komentarzy
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Dla pojedynczych właściwości nawigacyjnych używa się .Reference() zamiast .Collection().
    // Jawne ładowanie powiązanego autora
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Lazy loading (leniwe ładowanie): Powiązane dane są automatycznie ładowane przy pierwszym odwołaniu się do nich. Wymaga konfiguracji proxy lub wstrzykiwania zależności i jest domyślnym zachowaniem w niektórych ORM.
    // Przy włączonym leniwym ładowaniu
    var post = context.Posts.Find(1);
    // Odwołanie do Comments wywołuje ładowanie
    int commentCount = post.Comments.Count;
    
    W Entity Framework Core konieczna jest instalacja pakietu Microsoft.EntityFrameworkCore.Proxies i wywołanie .UseLazyLoadingProxies() w konfiguracji DbContext. Właściwości nawigacyjne powinny być zadeklarowane jako virtual.

Wybór metody zależy od scenariusza użycia i kompromisu między wydajnością (liczbą zapytań) a ilością ładowanych danych.