Question

Dans mon application, je mets un mappage dictionnaire ternaire de telle sorte que pour un utilisateur donné, je peux récupérer pour chaque instance « paramètres » d'un objet qui appartient à l'utilisateur. C'est, j'ai quelque chose comme:

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

    //...

Alors, chaque fois que j'ai un objet Baz, je peux rechercher les paramètres de l'utilisateur courant baz via currentUser.BazSettings[baz].

Je voudrais être en mesure d'utiliser une session sans état pour ce faire, mais je reçois un LazyInitializationException avec ce code:

//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`

Quand je l'utilise à la place un ISession, le problème disparaît.

Le message d'erreur complet NHibernate comprend le texte « aucune session ou session fermée ». Cela est logique parce que lors de l'utilisation d'une session sans état, les entités ne sont pas connectés à la session. Cependant, je pense qu'il ya un moyen d'utiliser la session sans état pour effectuer cette recherche.

Comment puis-je utiliser une session sans état pour effectuer la currentUser.BazSettings[baz] de recherche?

Était-ce utile?

La solution

Les sessions sans état ne prennent pas en charge le chargement paresseux, exactement parce qu'ils sont sans état :. Ils ne suivent pas quoi que ce soit sur les entités récupérées avec eux

La seule façon de le faire fonctionner est le chargement désireux de la collection. Mais pourquoi avez-vous voulez pour utiliser les sessions sans état, si elles ne fournissent pas clairement ce dont vous avez besoin?

Autres conseils

Vous devez utiliser ISession au lieu de IStatelessSession parce que les opérations effectuées à l'aide d'une session sans état ne cascade à des instances et des collections associées sont ignorées par une session sans état.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top