¿Cuál es la diferencia entre lazy="true"
y lazy="proxy"
en nhibernate?nhibernate opciones de carga diferida
Respuesta
lazy = "proxy" significa que NHibernate inicializará las instancias de su clase de forma lenta; Cuando NHibernate recupera una instancia de su clase de la base de datos, en este caso, no devolverá una instancia "real" de su clase, sino que le dará un proxy. Es decir, devolverá un objeto que sea de otro tipo, más específicamente, un objeto que sea una subclase de su clase (generada por NHibernate a través de la generación IL).
El objeto que se le dará, es un proxy, y la única propiedad poblada es la propiedad Id. Tan pronto como llame a otra propiedad en la instancia, NHibernate inicializará el proxy y recuperará todas las otras propiedades/colecciones (excepto aquellas que están cargadas de forma diferida) de la base de datos.
Lazy = "true" se utiliza en otro nivel. Mientras que lazy = "proxy" se usa en el nivel de clase, lazy = "true" se usa en el nivel de colección. Significa que la colección debe estar cargada de forma lenta.
El documentation reference dice que el valor del atributo de proxy está en:
lazy="proxy|no-proxy|false"
lazy (opcional - por defecto es proxy): Por defecto, las asociaciones de punto único van con proxies.
lazy = "no-proxy" especifica que la propiedad debe buscarse de forma diferida cuando se accede por primera vez a la variable de instancia (requiere instrumentación de bytecode de compilación).
lazy = "false" especifica que la asociación siempre será buscada con entusiasmo.
No debería lazy = "proxy" especificar que la propiedad debe buscarse perezosamente cuando se accede por primera vez a la variable de instancia –
para obtener más información en el blog de ayende: http://ayende.com/Blog/archive/2010/01/ 28/nhibernate-new-feature-no-proxy-associations.aspx –
Acabo de formatear eso para que las opciones estén en líneas de diferencia. –
De forma predeterminada, Hibernate3 utiliza la recuperación de selección de recepción diferida para las colecciones y la recuperación de proxy diferida para las asociaciones de un solo valor. Estos valores predeterminados tienen sentido para la mayoría de las asociaciones en la mayoría de las aplicaciones.
http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#performance-fetching-lazy
sospecho otra forma de pensar en que sería así.
class Foo
{
public virtual Bar SingleBar { get; set; }
public virtual ICollection<Bar> MultiBar { get; set; }
}
- lazy = "proxy" se aplica a los objetos individuales (es decir foo.SingleBar)
- lazy = "true" se aplica a colecciones de objetos (es decir foo.MultiBar)
(No puede establecer lazy = "proxy" en una colección, ni puede establecer lazy = "true" en una sola referencia. O hará que NH arroje una XmlSchemaException que es un poco críptica para principiantes.)
Operationally ellos hacen lo mismo actuar: cuando y solo cuando se accede a la propiedad, NHibernate accede a la base de datos y completa la propiedad.
Sin embargo, hay una ligera diferencia en la implementación debido a lo que se necesita para recuperar los objetos (en el caso individual, la identificación de la referencia (Barra) se cargó con la entidad padre (Foo). son desconocidos y deben encontrarse en otra tabla)
En la aplicación que estaba trabajando había una diferencia entre "proxy" y "verdadero". En caso de que la clave externa tuviera un valor que no estaba presente en la tabla asociada lazy = "true" lanzó ObjectNotFoundException durante la consulta de Linq mientras que lazy = "proxy" funcionó como se esperaba. –
- 1. fluente nhibernate r1.0 fluidez mapeo deshabilitar carga diferida
- 2. ¿Biblioteca de carga diferida?
- 3. ¿Carga diferida del iframe?
- 4. UITableView optimización de carga diferida
- 5. Carga diferida de los atributos
- 6. Carga diferida, carga diferida y carga ansiosa en el marco de la entidad
- 7. Carga diferida en Knockout JS
- 8. imágenes carga diferida dentro de jQuery Mobile
- 9. Carga diferida de TreeView en .NET
- 10. imágenes de carga diferida y SEO
- 11. Carga diferida de Hibernate en objetos separados
- 12. Spring + Hibernate Error de carga diferida
- 13. Elementos de carga diferida con filtrado
- 14. Carga diferida de imágenes con degradación (JavaScript)
- 15. Páginas de carga diferida en UIScrollView
- 16. NHibernate: cómo habilitar la carga diferida en el mapeo de uno a uno
- 17. NHibernate - acceder al ID de un objeto asociado sin carga diferida todo el objeto
- 18. NHibernate: "colección no fue procesado por flush()" debida a un asunto carga diferida
- 19. NHibernate carga diferida anidado colecciones con futuros para evitar N + 1 problema
- 20. UITableView con desplazamiento infite y carga diferida
- 21. Deshabilitar la carga diferida en Hibernate
- 22. La carga diferida en Rails 3.2.6
- 23. PHP Objetos de carga diferida e inyección de dependencia
- 24. nhibernate, carga ansiosa y paginación
- 25. GWT: carga diferida de recursos de JS externos
- 26. ¿Cómo el rendimiento implementa el patrón de carga diferida?
- 27. Evitar que Dozer active la carga diferida de Hibernate
- 28. Patrón de repositorio con carga diferida usando POCO
- 29. Entity Framework 4 propiedades de carga diferida selectiva
- 30. Implementación de módulos con carga diferida en VBScript
¿Y cuál es la diferencia con lazy = "true"? –
Parece que no respondió la pregunta. – gdoron