2010-04-20 15 views

Respuesta

11

Castle se puede utilizar (entre otros, tiene la opción, también puede usar LinFu, Spring.NET, ...) para crear proxies dinámicos de sus entidades.

De forma predeterminada, NHibernate utiliza proxies dinámicos para representar sus entidades; al hacerlo, puede devolverle un objeto cuando recupera alguna entidad de la base de datos, sin que se llenen todas las propiedades. Al usar un proxy dinámico, solo poblará la entidad una vez que realmente se refiera a una propiedad.
(Por lo tanto, es un tipo de carga lenta, que no debe confundirse con la carga diferida de colecciones/asociaciones).

Este comportamiento es la razón por la NHibernate quiere crear cada propiedad como virtuales por defecto: NHibernate creará una nueva clase que utiliza este castillo (o Linfu, ...) proveedor de proxy que hereda de su entidad, y se anula todas las propiedades para que pueda 'inyectar' el código que es necesario para recuperar los datos necesarios del DB.

Puede deshabilitar este comportamiento especificando 'lazy = false' en su mapeo de entidades. (Aunque, creo que incluso si deshabilita esta función, NHibernate aún requerirá que use una de las fábricas de proxy).

3

Cuando selecciona una entidad de ISession, no obtiene una instancia de entidad real, sino un objeto proxy. Este objeto proxy hereda su entidad y es utilizado por NHibernate para rastrear los cambios realizados en los campos.

Cuestiones relacionadas