Domanda

Nella mia app, ho creato una mappatura dizionario ternario in modo che per un determinato utente, posso recuperare "impostazioni" per ogni istanza di un oggetto che appartiene all'utente. Cioè, ho qualcosa di simile:

public class User
{
    public virtual IDictionary<Baz, BazSettings> BazSettings { get; set; }

    //...

Quindi, ogni volta che ho un oggetto Baz, posso occhiata dell'utente corrente Baz impostazioni tramite currentUser.BazSettings[baz].

Mi piacerebbe essere in grado di utilizzare una sessione senza stato per fare questo, ma ho un LazyInitializationException con questo codice:

//int bazId;
using (IStatelessSession session = Global.SessionFactory.OpenStatelessSession())
{
    var currentUser = session.Get<User>(Membership.GetUser().ProviderUserKey);
    var baz = session.Get<Baz>(bazId);
    var bazSettings = currentUser.BazSettings[baz]; // raises `LazyInitializationException`

Quando uso invece un ISession, quindi il problema va via.

Il messaggio di errore NHibernate completo comprende il testo "nessuna sessione o la sessione è stata chiusa". Ciò ha senso perché quando si utilizza una sessione senza stato, gli enti non sono collegati alla sessione. Tuttavia, vorrei pensare che ci sia un modo per utilizzare la sessione senza stato per eseguire questa ricerca.

Come si usa una sessione senza stato per eseguire la ricerca currentUser.BazSettings[baz]?

È stato utile?

Soluzione

sessioni

??Stateless non supportano lazy loading, esattamente perché sono stateless :. non traccia nulla per le entità recuperati con loro

L'unico modo per farlo funzionare è eager loading la collezione. Ma perché voler per usare le sessioni senza stato, se chiaramente non forniscono quello che ti serve?

Altri suggerimenti

Si dovrebbe usare ISession invece di IStatelessSession perché le operazioni effettuate utilizzando una sessione senza stato non in cascata alle istanze e collezioni associate vengono ignorati da una sessione senza stato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top