Sobes.tech
Middle

Cum are loc încărcarea entităților legate în C#?

sobes.tech AI

Răspuns de la AI

Încărcarea entităților legate în C# se realizează adesea cu ajutorul bibliotecilor ORM, cum ar fi Entity Framework Core. Abordările principale:

  • Încărcare eager (cu nerăbdare): Datele legate sunt încărcate împreună cu entitatea principală într-o singură interogare la bază de date.
    // Utilizarea metodei Include pentru încărcare eager
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Încărcare explicită: Datele legate sunt încărcate explicit după obținerea entității principale.
    // Obținerea entității principale
    var post = context.Posts.Find(1);
    
    // Încărcare explicită a comentariilor legate
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Pentru proprietățile de navigație unice, se folosește .Reference() în loc de .Collection().
    // Încărcare explicită a autorului legat
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Încărcare lazy (lenoasă): Datele legate sunt încărcate automat la prima accesare. Necesită configurarea proxy-urilor sau injecție de dependențe și este comportamentul implicit în unele ORM-uri.
    // Cu încărcare lazy activată
    var post = context.Posts.Find(1);
    // Accesarea Comments declanșează încărcarea
    int commentCount = post.Comments.Count;
    
    În Entity Framework Core, este necesară instalarea pachetului Microsoft.EntityFrameworkCore.Proxies și apelarea .UseLazyLoadingProxies() în configurația DbContext. Proprietățile de navigație trebuie declarate ca virtual.

Alegerea metodei depinde de scenariul de utilizare și de compromisul între performanță (numărul de interogări) și volumul de date încărcate.