2010-04-20 5 views

risposta

11

Castle può essere utilizzato (tra gli altri, è possibile scegliere, è anche possibile utilizzare LinFu, Spring.NET, ...) per creare proxy dinamici delle entità.

Per impostazione predefinita, NHibernate utilizza i proxy dinamici per rappresentare le entità; così facendo, è in grado di restituire un oggetto quando si recupera qualche entità dal DB, senza che tutte le proprietà vengano popolate. Usando un proxy dinamico, popolerà l'entità solo quando si fa realmente riferimento a una proprietà.
(Quindi si tratta di una sorta di caricamento lazy, da non confondere con il caricamento lazy di collezioni/associazioni però).

Questo comportamento è il motivo per cui NHibernate vuole di creare ogni proprietà come virtuale di default: NHibernate creerà una nuova classe utilizzando questo castello (o Linfu, ...), fornitore di procura che eredita dal vostro ente, e sarà sovrascrive tutte le proprietà in modo che possa "iniettare" il codice necessario per recuperare i dati necessari dal DB.

È possibile disabilitare questo comportamento specificando "lazy = false" nella mappatura dell'entità. (Anche se, penso che anche se si disabilita questa funzione, NHibernate richiederà comunque l'utilizzo di una delle fabbriche proxy).

3

Quando si seleziona un'entità da ISession non si ottiene un'istanza di entità reale: si ottiene oggetto proxy. Questo oggetto proxy eredita la tua entità e utilizzato da NHibernate per tenere traccia delle modifiche apportate ai campi.

Problemi correlati