Frage

In meiner App habe ich ein ternäres Wörterbuch -Mapping eingerichtet, damit ich für einen bestimmten Benutzer "Einstellungen" für jede Instanz eines Objekts abrufen kann, das dem Benutzer gehört. Das heißt, ich habe so etwas wie:

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

    //...

Also wann immer ich eine habe Baz Objekt, ich kann die BAZ -Einstellungen des aktuellen Benutzers über die Sichtweise durchsuchen currentUser.BazSettings[baz].

Ich möchte eine staatenlose Sitzung verwenden können, aber ich bekomme eine LazyInitializationException mit diesem 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`

Wenn ich stattdessen eine benutze ISession, Dann geht das Problem weg.

Die vollständige NHiberNate -Fehlermeldung enthält den Text "Keine Sitzung oder Sitzung wurde geschlossen". Dies ist sinnvoll, da Entitäten bei der Verwendung einer staatenlosen Sitzung nicht mit der Sitzung verbunden sind. Ich würde jedoch denken, dass es eine Möglichkeit gibt, die staatenlose Sitzung zu verwenden, um diese Suche durchzuführen.

Wie verwende ich eine staatenlose Sitzung, um die Suche durchzuführen? currentUser.BazSettings[baz]?

War es hilfreich?

Lösung

Staatenlose Sitzungen unterstützen nicht faulen Laden, genau weil sie es sind staatenlos: Sie verfolgen nicht irgendetwas über die mit ihnen abgerufenen Einheiten.

Die einzige Möglichkeit, es zum Laufen zu bringen, ist das Laden der Sammlung. Aber warum machst du? wollen Um Staatenlose Sitzungen zu verwenden, wenn sie eindeutig nicht das liefern, was Sie brauchen?

Andere Tipps

Sie sollten isession anstelle von istatelessSession verwenden, da Operationen, die mit einer staatenlosen Sitzung ausgeführt werden, nicht auf zugehörige Instanzen kaskadieren und Sammlungen von einer staatenlosen Sitzung ignoriert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top