Ho una classe di repository che definisce alcuni metodi Get/Save/Delete di base. All'interno di questi, utilizzo NHibernate per eseguire il lavoro sulle mie entità aziendali. Per esempio:Il modo migliore per utilizzare NHibernate con il modello di repository
Public Class SecurityRepositoryNHibImpl : Implements ISecurityRepository
Public Function GetUser(ByVal UUID As System.Guid) As Entities.User Implements ISecurityRepository.GetUser
Dim eUser As Entities.User
Using session As ISession = NHibernateHelper.OpenSession()
eUser = session.Get(Of Entities.User)(UUID)
End Using
Return eUser
End Function
End Class
Tuttavia, sulla mia classe User ho alcune proprietà e le collezioni di altri oggetti che Idealmente mi piacerebbe essere caricato in modo pigro. Ma ovviamente, l'ISession è creata e disposta all'interno del repository, il che credo sia il motivo per cui, al di fuori di questo, quando provo ad accedere a quelle proprietà ottengo un errore "Impossibile inizializzare il proxy - nessuna sessione".
La mia unica opzione è quindi disabilitare il caricamento lento quando si utilizzano i repository? O è possibile (o semplicemente sciocco) in qualche modo ottenere la sessione in ambito nel livello aziendale?
Mi piace il modello di repository e NHibernate sta crescendo su di me (dopo molte frustrazioni iniziali che cercano di farlo funzionare), quindi qual è il modo migliore in cui i guru hanno scoperto di usarli insieme?
Sono abbastanza nuovo di NHibernate e dei modelli di repository in generale (al lavoro usiamo ancora principalmente VB6!), Quindi perdona quella che potrebbe essere una domanda stupida. Grazie.
@mookid: Grazie amico, è davvero utile ma potrei lasciarlo aperto ancora un po '. È il back-end di un servizio web WCF, e tutte le funzioni saranno a livello di chiamata, in modo che una sessione per ogni chiamata-vita sarà buona. Non sono proprio sicuro di come ottenere una cosa del genere funzionando nel livello aziendale, idealmente non voglio che gli oggetti business debbano interfacciarsi direttamente con le classi di NHibernate. Immagino che una specie di wrapper per la sessione di NHibernate lo riassuma almeno ... Hmm, mi hai messo sulla strada giusta almeno.
simile alla parola chiave qui è "unità di lavoro", per il quale una tonnellata di risorse esiste sul web in relazione alla NHibernate. In particolare cerca Ayende's implementation in Rhino Commons e il suo webcast App Architecture (no. 9 at Hibernating Rhinos), molto informativo. Inizialmente ero confuso perché pensavo di mettere una "Unità di lavoro" nello scenario aziendale mescolando preoccupazioni, but I was soon corrected.