Sobes.tech
Middle

Como ocorre o carregamento de entidades relacionadas em C#?

sobes.tech IA

Resposta da IA

O carregamento de entidades relacionadas em C# é frequentemente realizado usando bibliotecas ORM, como o Entity Framework Core. As abordagens principais:

  • Carregamento ansioso (Eager): Os dados relacionados são carregados juntamente com a entidade principal numa única consulta à base de dados.
    // Uso do método Include para carregamento ansioso
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Carregamento explícito (Explicit): Os dados relacionados são carregados explicitamente após obter a entidade principal.
    // Obtenção da entidade principal
    var post = context.Posts.Find(1);
    
    // Carregamento explícito dos comentários relacionados
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Para propriedades de navegação singulares, usa-se .Reference() em vez de .Collection().
    // Carregamento explícito do autor relacionado
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Carregamento preguiçoso (Lazy): Os dados relacionados são carregados automaticamente na primeira vez que são acessados. Requer configuração de proxies ou injeção de dependências e é o comportamento padrão em alguns ORM.
    // Com carregamento preguiçoso ativado
    var post = context.Posts.Find(1);
    // Acesso a Comments dispara o carregamento
    int commentCount = post.Comments.Count;
    
    No Entity Framework Core, é necessário instalar o pacote Microsoft.EntityFrameworkCore.Proxies e chamar .UseLazyLoadingProxies() na configuração do DbContext. As propriedades de navegação devem ser declaradas como virtual.

A escolha do método depende do cenário de uso e do compromisso entre desempenho (número de consultas) e volume de dados carregados.