Sobes.tech
Middle

Kako se vrši učitavanje povezanih entiteta u C#?

sobes.tech АИ

Одговор од АИ

Učitavanje povezanih entiteta u C#-u često se vrši pomoću ORM biblioteka, kao što je Entity Framework Core. Glavni pristupi:

  • Eager (nestrpljivo) učitavanje: Povezani podaci se učitavaju zajedno sa glavnom entitetom u jednom upitu ka bazi podataka.
    // Korišćenje metode Include za eager učitavanje
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Explicit (izričito) učitavanje: Povezani podaci se izričito učitavaju nakon dobijanja glavnog entiteta.
    // Dobijanje glavnog entiteta
    var post = context.Posts.Find(1);
    
    // Izričito učitavanje povezanih komentara
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Za pojedinačne navigacione osobine koristi se .Reference() umesto .Collection().
    // Izričito učitavanje povezanog autora
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Lazy (lenjivo) učitavanje: Povezani podaci se automatski učitavaju pri prvom pristupu. Zahteva konfiguraciju proxy-ja ili injekciju zavisnosti i podrazumevano je ponašanje u nekim ORM-ovima.
    // Sa omogućenom lazy loading-om
    var post = context.Posts.Find(1);
    // Pristup Comments pokreće učitavanje
    int commentCount = post.Comments.Count;
    
    U Entity Framework Core, potrebno je instalirati paket Microsoft.EntityFrameworkCore.Proxies i pozvati .UseLazyLoadingProxies() u konfiguraciji DbContext. Navigacione osobine treba deklarisati kao virtual.

Izbor metode zavisi od scenarija korišćenja i kompromisa između performansi (broj upita) i volumena učitanih podataka.