Sobes.tech
Middle

Ako prebieha načítanie súvisiacich entít v C#?

sobes.tech AI

Odpoveď od AI

Načítanie súvisiacich entít v C# sa často vykonáva pomocou ORM knižníc, ako je Entity Framework Core. Hlavné prístupy:

  • Eager (dychtivé) načítanie: Súvisiace údaje sa načítajú spolu s hlavnou entitou v jednom dopyte do databázy.
    // Použitie metódy Include na eager načítanie
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Explicit (výslovné) načítanie: Súvisiace údaje sa načítajú explicitne po získaní hlavnej entity.
    // Získanie hlavnej entity
    var post = context.Posts.Find(1);
    
    // Výslovné načítanie súvisiacich komentárov
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Pre jednotlivé navigačné vlastnosti sa používa .Reference() namiesto .Collection().
    // Výslovné načítanie súvisiaceho autora
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Lazy (lenivé) načítanie: Súvisiace údaje sa automaticky načítajú pri prvom prístupe. Vyžaduje konfiguráciu proxy alebo injekciu závislostí a je predvoleným správaním v niektorých ORM.
    // Pri povolenom lazy loadingu
    var post = context.Posts.Find(1);
    // Prístup k Comments spustí načítanie
    int commentCount = post.Comments.Count;
    
    V Entity Framework Core je potrebné nainštalovať balíček Microsoft.EntityFrameworkCore.Proxies a volať .UseLazyLoadingProxies() v konfigurácii DbContext. Navigačné vlastnosti musia byť deklarované ako virtual.

Výber metódy závisí od scenára použitia a kompromisu medzi výkonom (počet dopytov) a objemom načítaných dát.