No entiendo lo que quieres decir con "Hice carga lenta". La carga diferida es una función, está activada de manera predeterminada y puedes desactivarla si no te gusta.
Hay dos tipos de carga diferida: para referencias a otras entidades y para listas.
Dada esta entidad:
class Entity
{
// pk
int id { get; private set; }
// reference to another entity
User MyUser { get; set; }
// list to other entities
IList<Comments> MyComments { get; set; }
}
Lazy carga en la referencia a usuario
Si tiene carga diferida en el usuario, es necesario definir todos los miembros de la clase de usuario virtual. NHibernate creará un llamado proxy. El proxy es una clase definida en tiempo de ejecución que deriva del usuario. Su código está accediendo a él como Usuario y no sabe que se trata de una subclase. Pero cuando accede a uno de sus miembros la primera vez, las propiedades se cargan desde la base de datos.
Si desea desactivar la carga diferida de la clase de usuario, es necesario hacer esto en su asignación:
<class name="User" lazy="false"> ...
Entonces NHibernate crea siempre las instancias de usuario tipo, sin proxies. No necesitas tener nada virtual.
Lazy carga en la lista de comentarios
Si utiliza la carga diferida en la lista de comentarios, es la propia lista que implementa la carga diferida. Si accede a la lista la primera vez, se carga desde la base de datos. NHibernate usa una lista que implementa IList, pero no es List.
Si desea desactivar la carga diferida en la lista, esto se hace en el mapeo de Entidad:
<class name="Entity">
<bag name="MyComments" lazy="false" >
...
Por lo general, la carga diferida es una buena cosa, y que la aplicación no tiene que preocuparse por mucho. Pero hay algunos riesgos. Por ejemplo, si serializas una instancia, y es un proxy, obtienes un proxy no inicializado en lugar de algo útil. La carga lenta solo funciona mientras la sesión esté abierta. No siempre es más rápido usar carga lenta. Si necesita cargar todos los datos de todos modos, es más rápido cargarlo de una pieza.
Por lo que la configuración debe hacerse con cuidado.
Editar:
Para responder a su pregunta original: ¿Es la carga diferida requiere para NHibernate? No. Pero: ¿Se requiere carga lenta en mi aplicación? Muy probablemente sí.
Creo que solo las aplicaciones pequeñas y bastante triviales no necesitan una carga lenta. Si tienes un sistema con muchas clases persistentes, necesitarás una carga diferida.
A agregué otra sección en mi respuesta. –