NHibernate, Session, Transaction

04/08/2008 - 09:42 von Udo Nesshoever | Report spam
Tach zusammen,

ich habe folgende Situation bzw. folgendes Problem:
Ich nutze NHibernate zum Datenzugriff, was an sich gut funktioniert.
Fuer jedes Objekt habe ich einen eigenen Manager, der sich jeweils um
eine Hibernate-Session, -Transaction etc. kuemmert und das jeweilige
Objekt speichert/aktualisiert/etc.

So weit so gut.

Nun habe ich die Situation, mehrere Objekte von verschiedenem Typ
aktualisieren zu muessen, es sind also mehrere Manager involviert. Die
ganze Aktion soll ganz oder gar nicht ablaufen, es springt Einem also
das Wort Transaction geradezu ins Gesicht.
Nun kuemmert sich aber jeder Manager selbst um sein Objekt, sprich auch
um die Session/Transaction. Das Ganze haendisch in eine Session zu
packen scheitert daran, dass NHibernate es wohl nicht vertraegt,
innerhalb einer Session mehere verschiedene(!) Objekttypen zu
bearbeiten.
Andersrum ist die Transaction leider von der Session abhaengig - also
eine Transaction um mehrere Session herumzubauen, funktioniert nicht.

Wobei ich jetzt hoffe, ich habe einfach Unrecht und etwas uebersehen.
Wer weiss oder kann mir einen Tipp geben, wie ich innerhalb einer
Transaction mehrere Objekttypen veraendern kann. (Diese Objekte stehen
nicht in direkter Beziehung zueinander, sind also nicht ueber einen
Propertywert miteinander verbunden, sodass ein Cascade funktionieren
koennte)

Schoenen Dank fuer's Lesen des laengeren Posts.

Cheers,
Udo
 

Lesen sie die antworten

#1 Marc Scheuner
04/08/2008 - 20:41 | Warnen spam
Ich nutze NHibernate zum Datenzugriff, was an sich gut funktioniert.
Fuer jedes Objekt habe ich einen eigenen Manager, der sich jeweils um
eine Hibernate-Session, -Transaction etc. kuemmert und das jeweilige
Objekt speichert/aktualisiert/etc.



Handelt es sich hier um eine Web-Applikation (ASP.NET), oder eine
Windows Forms / WPF Applikation?

Bei ASP.NET wird generell empfohlen, pro HTTP Request genau 1
NHibernate Session zu haben. Man kann das ganze elegant mittels eines
HttpModules kapseln, und der ASP.NET Seite zugànglich machen.

Ansonsten würde ich mir überlegen, die Manager von der Session zu
trennen, e.g. die Session und deren Lifetime separat von den
jeweiligen Managern zu behandeln, und die Session den Managern von
extern mitzugeben - damit kann man problemlos auch 1 Session aufmachen
und dann vno 3 oder 4 Managern "parallel" benutzen lassen.

Schau dir allenfalls mal die (englisch-sprachigen, aber sehr gut
gemachten) Videos zum "Summer of NHibernate" an - da wird auch vieles
in dieser Hinsicht debatiert und erlàutert (so ab ca. Folge 3 oder so
- vorher ist sehr "basic", aber durchaus auch sehenswert).

http://www.summerofnhibernate.com

Gruss,
Marc

Ähnliche fragen