¿Bajo qué situación podría ser más beneficiosa la carga ansiosa que la carga perezosa?
La carga diferida en Entity Framework es el fenómeno predeterminado que ocurre para cargar y acceder a las entidades relacionadas. Sin embargo, la carga ansiosa se refiere a la práctica de cargar forzadamente todas estas relaciones.
Lo pregunto porque es obvio que la carga diferida es más amigable con los recursos, e incluso si usamos el método ToList() , aún podemos aprovechar el comportamiento de carga diferida.
Sin embargo, pensé que tal vez la carga diferida aumenta la cantidad de solicitudes a la base de datos real y tal vez es por eso que a veces los desarrolladores usan el método Inlcude para forzar la carga de todas las relaciones.
Por ejemplo, cuando se usa el scaffolding automático de Visual Studio en MVC 5, el método Index creado automáticamente en el controlador siempre usa Eager Loading, y siempre me he preguntado por qué Microsoft usa Eager Loading por defecto en ese caso.
Agradecería que alguien me explicara en qué situación sería más beneficiosa la carga ansiosa que la carga diferida, y ¿por qué la usamos si hay algo más amigable con los recursos como la carga diferida?
Creo que es bueno categorizar relaciones como esta.
Cuándo usar la carga ansiosa
Cuándo usar la carga diferida
Nota: como dijo Transcendent, puede haber un problema de eliminación con la carga diferida.
Carga ansiosa: la carga ansiosa lo ayuda a cargar todas las entidades necesarias a la vez. es decir, los objetos relacionados (objetos secundarios) se cargan automáticamente con su objeto principal.
Cuándo usar:
Carga diferida: en caso de carga diferida, los objetos relacionados (objetos secundarios) no se cargan automáticamente con su objeto principal hasta que se solicitan. De forma predeterminada, LINQ admite la carga diferida.
Cuándo usar:
NOTA: Entity Framework admite tres formas de cargar datos relacionados: carga ansiosa, carga diferida y carga explícita.
La carga diferida producirá varias llamadas SQL, mientras que la carga ansiosa puede cargar datos con una llamada "más pesada" (con uniones/subconsultas).
Por ejemplo, si hay un ping alto entre su web y los servidores sql, optaría por la carga ansiosa en lugar de cargar los elementos relacionados 1 por 1 con la carga diferida.