2009-05-11 8 views

Respuesta

18

Yo sugeriría que lea Must Everything Be Virtual With NHibernate?

La rápida respuesta a esa pregunta es: porque necesitamos miembros a ser virtual con el fin de hacer nuestra carga perezosa mágica/vudú.

La respuesta más larga es más interesante though. Una característica importante que cualquier ORM real debe tener es transparente Lazy Cargando. Si recupera un objeto través de un ORM, usted no quiere que se tire automáticamente en todo un gráfico de objetos (no por defecto de todos modos), sin embargo no quiere la basura su código con comprueba si ciertas asociaciones se han cargado todavía, y luego las carga si es necesario. Esta es la responsabilidad del ORM . Lo ideal es que desee poder acceder a las propiedades y tener ORM cargar los datos necesarios al primer acceso de esas propiedades si los datos aún no se han recuperado.

6

Como dijo Andrew, las propiedades son virtuales para activar la carga diferida. Aquí hay una explicación de por qué es esto: en el tiempo de ejecución, NHibernate sustituirá los objetos proxy por los objetos de su propiedad real. Una vez que se accede, los objetos proxy saben cómo obtener los objetos reales para usted. Marcar las propiedades como virtuales permite que ocurra esta sustitución.

Cuestiones relacionadas