Frage

Wenn ich 10 Datenbank Anrufe auf meiner Web-Seite, und keiner von ihnen irgendwelche Transaktionen erfordern usw. Sie werden einfach aus der Datenbank Abrufen von Daten (liest), soll ich noch die Einheit der Arbeitsklasse verwenden?

Ist es, weil eine neue Sitzung pro Datenbank-Aufruf zu schaffen ist zu teuer?

War es hilfreich?

Lösung

Mit NHibernate, Sitzung Fabrik Schöpfung ist sehr teuer (so wollen Sie die Sitzung Fabrik cachen, sobald es erstellt wird, wahrscheinlich auf dem HttpApplication), aber Sitzung Schöpfung ist sehr billig. Mit anderen Worten, wenn es Ihren Code sauberen, mehr Sitzungs Kreationen hält, ist nicht unbedingt eine schlechte Sache. Ich denke, die NH-Dokumentation sagt es am besten:

  

Ein ISessionFactory ist ein   teuer zu erstellen, THREAD Objekt   soll von allen geteilt werden   Anwendungs-Threads. Ein ISession ist ein   preiswert, nicht-Objekt THREAD   das sollte einmal verwendet werden, für ein einzelnes   Geschäftsprozess, und dann verworfen.

So, das UOW Muster verwendet, ist wahrscheinlich nicht mehr effizient durch den zusätzlichen Aufwand, aber es ist eine gute Praxis, und der Aufwand ist wahrscheinlich nicht, dass Sie gehen zu verletzen. Vorzeitige Optimierung und so weiter.

Andere Tipps

Ja, sollten Sie eine Transaktion verwenden. Von Ayende Blog:

„NHibernate davon ausgehen, dass alle Zugriff auf die Datenbank unter einer Transaktion durchgeführt wird, und rät dringend, jede Benutzung der Sitzung ohne eine Transaktion.“

Für weitere Informationen, hier ist ein Link zu seinem Blog-Posting:

http://ayende.com/Blog/archive/2008/12/28/nh-prof-alerts-use-of-implicit-transactions-is-discouraged.aspx

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