Frage

Ich bin neu bei NHibernate (meinem ersten großen Projekt damit).
Ich habe eine einfache Methode des Datenzugriffs verwendet, indem ich das ISession-Objekt innerhalb eines Using-Blocks erstellt habe, um mein Objekt oder meine Liste von Objekten abzurufen, und auf diese Weise wurde die Sitzung nach dem Verlassen des Codeblocks zerstört.

Dies funktioniert jedoch nicht in einer Situation, in der Lazy-Loading erforderlich ist.
Wenn ich beispielsweise ein Kundenobjekt habe, das über eine Eigenschaft verfügt, die eine Sammlung von Bestellungen ist, erhalte ich beim Lazy-Load-Versuch eine Ruhezustandsausnahme.
Verwendet jemand eine andere Methode?

Andere Tipps

Besuche die SummerOfNHibernate Webcasts für ein tolles Tutorial...Was Sie konkret suchen, kommt erst in Webisode 5 oder 6.

Halten Sie Ihre Sitzung für Ihre gesamte Arbeitseinheit geöffnet.Wenn die Lebensdauer Ihrer Sitzung zu kurz ist, können Sie nicht vom Cache auf Sitzungsebene profitieren (was von Bedeutung ist).Jedes Mal, wenn Sie einen Roundtrip zur Datenbank verhindern können, können Sie viel Zeit sparen.Sie können Lazy Loading auch nicht nutzen, was unbedingt zu verstehen ist.

Wenn Ihre Sitzungsdauer zu lang ist, können andere Probleme auftreten.

Wenn es sich um eine Web-App handelt, ist das Muster „Sitzung pro httpRequest“ wahrscheinlich gut geeignet.Im Grunde handelt es sich dabei um ein HttpModule, das die Sitzung zu Beginn der Anfrage öffnet und am Ende leert/schließt.Stellen Sie sicher, dass Sie die Sitzung in HttpContext.Items speichern, KEINE STATISCHE VARIABLE.<--- führt zu allen möglichen Problemen, mit denen Sie sich nicht befassen möchten.

Vielleicht schauen Sie sich auch an RhinoCommons für die Implementierung einer Arbeitseinheit.

Da Sie eine Web-App entwickeln (vermutlich mit ASP.NET), schauen Sie sich das an NHibernate Best Practices mit ASP.NET bei CodeProject.

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