Frage

Neu bei NHibernate (mein Haftungsausschluss). Ich stieß auf einem ähnlichen und interessanten Artikel über MVC aber ich ist mehr gespannt, was allgemeine Empfehlungen sind für NHibernate Sitzungen innerhalb einer generischen Web-Anwendung zu verwalten.

Ich habe über die Burrow Projekt, aber ich beginne zu erkennen, dass es scheint, ein paar verschiedenen Richtungen zu nehmen zu sein. Ich bin mir bewusst, es ist wahrscheinlich nicht in meinem Interesse an eine neue Session erstellen jedes Mal, wenn ich brauchen die Datenbank zu berühren, also bin ich daran interessiert, was die Gemeinde tut Sitzungen zu verwalten. Haben Sie Burrow verwenden? Haben Sie Ihre Session in Singleton wickeln?

Jede Richtung oder Einsicht ist immer sehr geschätzt.

War es hilfreich?

Lösung

Um Ihre Frage zu beantworten direkt Ihr ISessionFactory Objekt sollte ein Singleton sein. Sie können zu diesem Zweck entweder programmatisch (das heißt, indem sie es in einem C # Singleton Verpackung) oder es in Ihrem IoC-Container zu konfigurieren.

Wie bei Sitzungen, sieht Burrow gut, aber die prodominant und einfachste Muster für Sitzungen in Web-Anwendungen - OpenSessionInView - kommen out-of-the-box mit NHibernate 2.0.0. Das heißt, Ihr Datenzugriffscode ruft ISessionFactory.GetCurrentSession() statt ISessionFactory.OpenSession(). Sie dann angeben, wie die Fabrik aktuelle Sitzung , indem Sie eine Implementierung von ICurrentSessionContext verwaltet wird. NHibernate bietet zwei out-of-the-Box diejenigen für alligning die Sitzung mit dem Web-Anfrage. Dies ist bekannt als ‚Kontext-bezogene Sessions‘ in der Dokumentation.

Kein Zweifel, eine komplexere Web-Anwendung könnte mehr länger benötigt Gespräche mit komplexem verzögertes Laden usw. nachhaltig, aber für eine Standard-Web-Anwendung NHibernate kontextuelle Sitzungen sollten ausreichen.

Andere Tipps

Ich schrieb zu diesem Thema eine Reihe von Blog-Posts über mit NHibernate / Fluent NHibernate Datenzugriffsmustern.

Die erste ist, empfehle ich abstrahieren die Interaktion von NHibernate.

anlegen gemeinsame generische und erweiterbare NHiberate Repository

Dann gilt für die Sitzungsverwaltung Umgang implementiert ich die „Session pro Geschäft Conversation“ Muster, das stattdessen eine NH-Sitzung für das Leben einer einzigen Seite Anfrage vorliegt zu haben, die ein allgemeines es für eine Reihe von Veranstaltungen besteht, ist sagen, eine Seite, Damit können Sie eine Reihe von Änderungen an der Form zu machen, und dann am Ende sie entweder gelten all permanent oder sie abzubrechen.

Conversation Per Business Transaction mit Postsharp und IoC

Wenn ich werde diesen Beitrag schreiben heute, würde ich nicht wieder verwenden Postsharp die AOP (Aspect Orientiert Programming) Code in meinem Projekt zu handhaben ich entweder verwenden würde, Linfu.AOP oder ein anderer Rahmen die AOP Interaktion zu tun.

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