2009-08-14 3 views
0

Ich baue eine Webanwendung, und wenn ich einen Datenbankanruf mache, brauche ich eine Sitzung.Nhibernate und Sitzungen, bitte klären

Ich verstehe das Erstellen eines Session-Objekts ist sehr teuer.

Ich verfolge das Repository-Muster hier: http://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/10/08/the-repository-pattern.aspx

Er nutzt etwas ein UnitOfWork genannt, die Sitzung zu erhalten.

Bei einer Webanwendung sollte ich nicht die Session in der Request.Items-Sammlung speichern? Also ist es nur einmal pro Anfrage erstellt?

Brauche ich wirklich UofW?

Antwort

0

Im Fall von NHibernate ist die Schlüsselklasse die SessionFactory, für die SessionProvider zuständig ist (wenn Sie es so implementieren). Behalten Sie die SessionFactory am Leben, und es behandelt die Sitzungen für Sie.

Ich habe auch scheinen Leute speichern die SessionFactory in ihrem IoC.

2

Die Sitzung ist die Einheit der Arbeit - es ist im Grunde verwendet, um Änderungen zu speichern, bis Sie sie auf die db spülen. Speichern Sie eine statische Sitzungsfactory beim Start und verwenden Sie diese, um eine Sitzung pro Webanforderung zu erstellen. Request.Items scheint ein gültiger Ort für die Sitzung zu sein.

Das Repository-Muster ist ein Wrapper über die Arbeitseinheit. Das Repository-Muster unterscheidet sich vom UOW-Muster darin, dass repo.Save (obj) das obj sofort auf die db speichern soll, während das UoW auf einen Flush wartet.

Mein Rat wäre, das Repository-Muster zu überspringen und die ISession direkt verwenden (siehe http://ayende.com/Blog/archive/2009/04/17/repository-is-the-new-singleton.aspx)

+0

Ich möchte das Repository-Muster verwenden, weil es mir grundlegende Crud für alle meine Entitäten w/0 Code geschrieben, wie kann das schlecht sein ?! – mrblah

+1

Die ISession-Schnittstelle geben Sie bereits grundlegende CRUD (. Get (), .Load , .Delete, .SaveOrUpdate) und komplexe Abfrage mit entweder HQL, Kriterien API oder NHibernate.Linq. – mcintyre321

+0

Siehe auch http://ayende.com/Blog/archive/2009/08/05/do-you-need-a-framework.aspx – mcintyre321

0

verwenden Ihre Sitzungen verwalten:

HybridSessionBuilder

Es verwaltet und gibt Ihnen einen Zugang einzelne Sitzung, die in der gesamten Anwendung verwendet wird.