Sobes.tech
Middle

¿Cómo se realiza la carga de entidades relacionadas en C#?

sobes.tech AI

Respuesta de la IA

La carga de entidades relacionadas en C# a menudo se realiza mediante bibliotecas ORM, como Entity Framework Core. Los enfoques principales:

  • Carga ansiosa (Eager): Los datos relacionados se cargan junto con la entidad principal en una sola consulta a la base de datos.
    // Uso del método Include para carga ansiosa
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Carga explícita (Explicit): Los datos relacionados se cargan explícitamente después de obtener la entidad principal.
    // Obtención de la entidad principal
    var post = context.Posts.Find(1);
    
    // Carga explícita de comentarios relacionados
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Para propiedades de navegación singulares se usa .Reference() en lugar de .Collection().
    // Carga explícita del autor relacionado
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Carga perezosa (Lazy): Los datos relacionados se cargan automáticamente en el primer acceso a ellos. Requiere configuración de proxies o inyección de dependencias y es el comportamiento predeterminado en algunos ORM.
    // Con carga perezosa habilitada
    var post = context.Posts.Find(1);
    // Acceder a Comments dispara la carga
    int commentCount = post.Comments.Count;
    
    En Entity Framework Core, es necesario instalar el paquete Microsoft.EntityFrameworkCore.Proxies y llamar a .UseLazyLoadingProxies() en la configuración de DbContext. Las propiedades de navegación deben declararse como virtual.

La elección del método depende del escenario de uso y del compromiso entre rendimiento (cantidad de consultas) y volumen de datos cargados.