Faule Suche eines Wörterbuchwerts mit einer staatenlosen Sitzung
-
23-10-2019 - |
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]
?
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.