Ist die Arbeitseinheit effiziente, wenn ich nicht etc für Transaktionen kümmern?
-
06-09-2019 - |
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?
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: