Non capisco cosa vuoi dire con "Ho fatto carico pigro". Il caricamento lento è una funzione, è attivata per impostazione predefinita e puoi disattivarla se non ti piace.
Esistono due tipi di caricamento lazy: per i riferimenti ad altre entità e per gli elenchi.
Dato questa entità:
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; }
}
pigro carico sul riferimento per l'utente
Se si dispone di lazy loading in uso, è necessario definire tutti i membri della classe User virtuale. NHibernate creerà un cosiddetto proxy. Il proxy è una classe definita in fase di esecuzione che deriva dall'utente. Il tuo codice sta accedendo come Utente e non è a conoscenza che è una sottoclasse. Ma quando si accede a uno dei suoi membri la prima volta, le proprietà vengono caricate dal database.
Se si desidera disattivare lazy loading sulla classe utente, è necessario farlo in sua mappatura:
<class name="User" lazy="false"> ...
Poi NHibernate crea sempre istanze del tipo di utente, senza deleghe. Non è necessario avere qualcosa di virtuale.
pigro carico sulla lista dei commenti
Se si utilizza lazy loading nella lista dei commenti, è la lista stessa che implementa il lazy loading. Se accedi alla lista per la prima volta, viene caricata dal database. NHibernate usa una lista che implementa IList, ma non è una lista.
Se si desidera disattivare il caricamento pigro nella lista, si esegue questa operazione nella mappatura delle Entità:
<class name="Entity">
<bag name="MyComments" lazy="false" >
...
Di solito, lazy loading è una buona cosa, e voi l'applicazione non deve preoccuparsi molto. Ma ci sono alcuni rischi. Ad esempio, se serializzi un'istanza, ed è un proxy, ottieni un proxy non inizializzato invece di qualcosa di utile. Il caricamento lento funziona solo finché la sessione è aperta. Non è sempre più veloce usare il caricamento lazy. Se è necessario caricare comunque tutti i dati, è più veloce caricarlo in un unico pezzo.
Quindi la configurazione deve essere eseguita con attenzione.
Edit:
Per rispondere alla tua domanda iniziale: è lazy loading necessario per NHibernate? No. Ma è richiesto il caricamento lazy nella mia applicazione? Molto probabilmente si.
Penso che solo le applicazioni piccole e piuttosto banali non necessitano di un caricamento lento. Se hai un sistema con molte classi persistenti, avrai bisogno di un caricamento lento.
A aggiunto un'altra sezione nella mia risposta. –