Carga diferida
Cuando cargamos un vendedor, haciendo algo como esto: SalesPerson person = session.Get<SalesPerson>(1); la colección Sales no será cargada. Esto es porque, por defecto, las colecciones son cargadas de manera diferida. Esto es, que no tocaremos la base de datos hasta que la información sea específicamente solicitada (ej. Podemos acceder a la propiedad Sales). Podemos invalidar este comportamiento cambiando la configuración lazy=”false” en el elemento bag.
La otra, más interesante, estrategia de carga implementada por NHibernate está en las entidades en sí mismas. Frecuentemente querrás agregar una referencia a un objeto sin tener que cargar el objeto real desde la base de datos. Por ejemplo, cuando agregamos una venta (Sales) a un vendedor (SalesPerson), necesitamos especificar el modelo (Model), pero no queremos cargar cada propiedad / lo único que queremos es obtener el Id para poder guardarlo en la columna ModelId de la tabla Sales. Cuando usas session.Load<T> (id) NHibernate cargara un proxy del objeto actual (a menos de que especifiques lazy=”false” en el elemento clase). Hasta donde puede importarte, el proxy se comporta exactamente igual que el objeto real, pero ningún dato será extraído de la base de datos hasta la primera vez que lo solicitas. Esto hace posible escribir el siguiente código:
Sale sale = new Sale(session.Load<Model>(1), DateTime.Now, 46000.00);
salesPerson.AddSales(sale);
session.SaveOrUpdate(salesPerson);
Sin tener que tocar siquiera la base de datos para cargar el objeto Model.
11d990da-a243-40d9-be60-38d3664bc3ee|0|.0