¿Cuáles son las diferencias entre estos 3 tipos de carga? ¿Alguien puede explicar con un ejemplo? Los diferentes recursos en línea usan diferentes definiciones, causando más confusión de la necesaria.Carga diferida, carga diferida y carga ansiosa en el marco de la entidad
Respuesta
La carga diferida y diferida son bastante (AFAIK, corrígeme si me equivoco). La gran diferencia es entre Eager y Lazy. Ansiosos que va a pasar en la delantera, Lazy ocurre sólo "cuando sea necesario" y la ejecución va a pasar en el DB nivel- vamos a echar un simple instrucción de combinación como un ejemplo
var people = (from p in people SELECT p).ToList();
var jobs = (from j in jobs SELECT j).ToList();
var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList()
Este es un ejemplo de carga ansiosa. Estamos recibiendo TODAS las personas, TODOS los trabajos, y estamos haciendo la unión en la memoria. No muy inteligente (por lo general). Esto es lo que parece un estilo perezoso.
var people = (from p in people SELECT p);
var jobs = (from j in jobs SELECT j);
var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList()
Lo que esto hace es crear un IQueryable para las personas y el trabajo (IQueryable es perezoso), y la unión está sucediendo en el PP. Esto ahorra actividad en la red, y generalmente es más rápido, ya que la base de datos está optimizada para hacer combinaciones y cosas así.
A menos que explícitamente digamos "¡Necesito esa información!" (Al listarlo, iterar a través de él, etc.) es flojo. Hay algunas peculiaridades más, pero esto debería ser una cartilla decente.
Lazy/Deferred Loading: Lazy loading y la carga diferida son lo mismo. La relación se carga cuando se accede por primera vez. La idea es que si los datos no son necesarios, no deberían cargarse.
Eager Loading: La relación se busca junto con el objeto Parent. Esto puede ser más eficiente al cargar datos, pero cargará datos independientemente de los datos que se usen/no usen.
Cuando una consulta devuelve los objetos, los objetos relacionados no se cargan al mismo tiempo.
En su lugar, se cargan automáticamente cuando se accede a la propiedad de navegación. También conocido como "carga diferida",
- 1. ¿Biblioteca de carga diferida?
- 2. EF: La carga diferida, la carga ansiosa, y "la enumeración de la enumerables"
- 3. ¿Carga diferida del iframe?
- 4. Carga diferida en Knockout JS
- 5. nhibernate opciones de carga diferida
- 6. UITableView optimización de carga diferida
- 7. Desactivar toda la carga diferida o forzar la carga ansiosa para un contexto LINQ
- 8. Carga diferida de los atributos
- 9. imágenes de carga diferida y SEO
- 10. Deshabilitar la carga diferida en Hibernate
- 11. UITableView con desplazamiento infite y carga diferida
- 12. La carga diferida en Rails 3.2.6
- 13. Páginas de carga diferida en UIScrollView
- 14. Carga diferida de TreeView en .NET
- 15. Carga diferida de Hibernate en objetos separados
- 16. Elementos de carga diferida con filtrado
- 17. Carga diferida de imágenes con degradación (JavaScript)
- 18. Spring + Hibernate Error de carga diferida
- 19. imágenes carga diferida dentro de jQuery Mobile
- 20. ¿El LINQ con un resultado escalar disparar la carga diferida
- 21. LINQ to SQL: en el procesamiento de la carga de asociaciones con carga diferida
- 22. Primefaces DataTable, la carga diferida y CommandButton por fila
- 23. ¿Condicional carga ansiosa?
- 24. Entity Framework 4 propiedades de carga diferida selectiva
- 25. ¿Cómo el rendimiento implementa el patrón de carga diferida?
- 26. nhibernate, carga ansiosa y paginación
- 27. ¿Por qué la infraestructura de la entidad necesita una ICollection para la carga diferida?
- 28. carga ansiosa y carga lenta en los rieles
- 29. Evitar que Dozer active la carga diferida de Hibernate
- 30. Doctrine2 (Doctrine 2.1) carga ansiosa en Symfony2
NOTA: la sintaxis puede no ser del 100%, simplemente salirse del manguito. –
Según su ejemplo, una vez que haga una ToList, es una carga ansiosa ya que hace un DB hit para obtener los datos. Entonces, parece ser más un estilo de programación. Sin embargo, con EF, hay una manera de establecer LazyLoading como verdadero o falso en las Opciones de contexto. ¿Cómo encaja eso? – DotnetDude
EF4 con LazyLoading off requerirá que diga People.Include ("Trabajos") para volver a traer los registros de trabajos (asumiendo que los trabajos están FK'D a Personas). Con LazyLoading activado, esos datos se devolverán cuando sea necesario. ES DECIR. cuando dices People.Jobs.ToList(); –