| Lorenzo Moretti |
NHibernate Proxy
Buondì,
spero di non chiedere nulla di ovvio...volevo confrontarmi con voi su un comportamento che ho notato nel configurare una mappatura di NHibernate. Premetto che sto usando la versione 2 e sto configurando il mapping attraverso file XML. Il db è SQL Server2000 e l'applicativo è un sito web multi layer sviluppato in ASP.NET con VS2005 (C#) - modello DDD. Il dominio a grandi linee è simile al pattern di analisi "Accountability" - Analysis Pattern [Fowler 96]. Abbiamo delle classi "Entità" che sono legate tra loro con delle "Relazioni". Le classi base sono estese con delle SubClass con metodo Join attraverso un Discriminator. Esempio: <subclass discriminator-value="x" extends="Entita" lazy="true" name="Impiegato"> <join table="Impiegati"> .... Le "Relazioni" contengono al suo interno delle classi che identificano il livello/struttura in cui sono inserite nell'azienda. Esempio: - Impiegato Pippo - Responsabile Pluto - Pippo lavora per Pluto da una data ad un'altra Le classi Impiegato e Responsabile estendono la classe Entita. La relazione tra i due è definita da una classe "RelazioneImpiegatoResponsabile" che estende la classe Relazione. (questa è una ricostruzione semplificata, in realtà lo scenario è più complesso ma questo basta per il problema in questione) Come è facile intuire la classe Relazione ha i classici due campi "Padre" e "Figlio" ... e Spirito Santo :) Arrivo al punto...Questa è la parte in causa della mappatura della relazione: <many-to-one name="Figlio" cascade="save-update" class="Entita" column="identitafiglio" foreign-key="identita" lazy="proxy" not-found="ignore" /> <many-to-one name="Padre" cascade="save-update" class="Entita" column="identitapadre" foreign-key="identita" lazy="proxy" not-found="ignore" /> Il punto è, se tolgo l'ultima parte [not-found="ignore"] l'oggetto che la sessione di NHibernate mi "inietta" nel campo (Figlio/Padre) non è più la classe vera ("Entita") ma il classico proxy : "EntitaProxy06644cd1ff3548429ccd65dbb68f9c34". Chiaramente in fase di persistenza mi becco un errore di tipo: "uninitialized proxy passed to save()". Il funzionamento dei Proxy e la logica del motore di persistenza di NHibernate mi è abbastanza chiaro ... ma non capisco la relazione tra l'uso del Proxy e l'attributo "not-found" ... ? sbaglio a stupirmi del comportamento? mi aspettavo che l'attributo si riferisse solo al comportamento specifico in fase di "Load" dell'entità in caso in cui la relazione "many-to-one" non venga trovata. Grazie mille a tutti... Ciao!!! Lorenzo |
| Lorenzo Moretti |
Re: NHibernate Proxy
Proprio nessuna idea? :(
|