5 Stimmen

Wie verwaltet man am besten eine Sitzung in NHibernate?

Ich bin neu in NHibernate (mein 1. großes Projekt mit ihm).
Ich hatte eine einfache Methode des Datenzugriffs verwendet, indem ich das ISession-Objekt innerhalb eines using-Blocks erstellte, um mein Objekt oder eine Liste von Objekten zu greifen, und auf diese Weise wurde die Sitzung nach Verlassen des Codeblocks zerstört.

Dies funktioniert jedoch nicht in Situationen, in denen "Lazy-Loading" erforderlich ist.
Wenn ich z. B. ein Kundenobjekt habe, das eine Eigenschaft hat, die eine Sammlung von Bestellungen ist, erhalte ich eine Hibernate-Ausnahme, wenn der Lazy-Load versucht wird.
Verwendet jemand eine andere Methode?

6voto

0 Stimmen

Nur eine Anmerkung, einige Monate später. Wir verwenden zwar immer noch die oben genannten Ansätze, aber die Leute, die an der Verwendung eines IOC-Tools für die Verwaltung von Dokumenten arbeiten, haben interessantere Arbeit geleistet ISessions y ISessionFactory s - weitere Informationen finden Sie in den Projekten StructureMap und FubuMvc.

1 Stimmen

@Matt: Schauen Sie sich die NHibernate-Einrichtung von Castle an, die es schon seit Jahren gibt: castleproject.org/container/facilities/trunk/nhibernate/

0 Stimmen

Die Links in der Antwort scheinen veraltet zu sein.

2voto

Chris Conway Punkte 15867

Überprüfen Sie die SummerOfNHibernate Webcasts für ein großartiges Tutorial... Das, wonach du suchst, kommt erst in Webisode 5 oder 6.

1voto

Ben Scheirman Punkte 39742

Halten Sie Ihre Sitzung für Ihre gesamte Arbeitseinheit offen. Wenn die Lebensdauer Ihrer Sitzung zu kurz ist, können Sie nicht vom Cache auf Sitzungsebene profitieren (der sehr wichtig ist). Jedes Mal, wenn Sie einen Roundtrip zur Datenbank vermeiden können, sparen Sie eine Menge Zeit. Sie können auch nicht die Vorteile des "Lazy Loading" nutzen, was unbedingt zu verstehen ist.

Wenn Ihre Sitzungsdauer zu groß ist, können Sie auf andere Probleme stoßen.

Wenn es sich um eine Webanwendung handelt, werden Sie wahrscheinlich mit dem Muster session-per-httpRequest gut zurechtkommen. Im Grunde handelt es sich dabei um ein HttpModule, das die Sitzung zu Beginn der Anfrage öffnet und am Ende flushes/closes. Achten Sie darauf, die Sitzung in HttpContext.Items NOT A STATIC VARIABLE zu speichern. <--- führt zu allen möglichen Problemen, mit denen Sie nicht umgehen wollen.

Sehen Sie sich auch Folgendes an RhinoCommons für die Implementierung einer Arbeitseinheit.

0 Stimmen

Ich habe viele Beispiele für diese Methode der Sitzungsverwaltung für Webanwendungen gesehen, aber es mit Winforms zum Laufen zu bringen ist eine andere Geschichte. Billy McCafferty versucht sein Bestes, gibt aber keine Ratschläge, wie man sein Framework in Winforms verwenden kann. Insbesondere, wann eine Transaktion in Winforms begonnen und beendet werden soll.

0voto

huseyint Punkte 14760

Da Sie eine Webanwendung entwickeln (vermutlich mit ASP.NET), sollten Sie sich NHibernate Best Practices mit ASP.NET bei CodeProject.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X