Ich hatte eine Methode mit einer Vielzahl von Persistenz-Anrufe, die eine nHibernate Sitzung verwendet, es hat funktioniert, war in Ordnung. Aber ich musste diese Methode umgestalten und eine Methode aus Multithread-Gründen aus einem Inhalt innerhalb einer Schleife extrahieren. Dann habe ich mit dieser Methode eine Klasse erstellt. Es ist wie bei einem normalen Refactoring, aber die nHibernate-Sitzung innerhalb dieses Methodenaufrufs ist unterbrochen, ohne Kontext, ich habe sie nicht zu irgendeinem Zeitpunkt abgeschlossen. Hat nHibernate Probleme mit Multithreading? Auch wenn ich nur noch einen Thread ausführe, habe ich das selbe Problem.nHibernate Sitzung und Multithreading
Ich benutze nHibernate Session durch ein SessionFactory und Façal Pattern, dh die Session ist kein Feld dieser Objekte, sie ist global in SessionFactory.
es ein wenig klarer zu machen:
VOR:
Method()
{
... persistence calls
foreach(Thing..)
{
...persistence calls for each thing (1)
}
...
}
NACH:
Method()
{
... persistence calls
foreach(Thing..)
{
create a thingResolver object with some data
open a new thread with thingResolver.Method (1)
starts this thread
}
.. waits for finishing threads and continues
}
Unsere nHibernate Session Factory ist Thread-aware und speichert/ruft die nHibernate-Sitzung pro Thread ab. Es funktioniert gut jetzt;)
danke Aleksey. Ich werde Probleme haben, es zu tun (arbeite mit einer anderen Sitzung), da es gegen mein Design verstößt, denke ich darüber nach, dieses Multithread-Ding zu fälschen. –
in der Tat ist meine Sitzungsfactory robust und kann eine Sitzung pro Thread beibehalten, funktioniert: D –
Aktualisierter Link zur Dokumentation http://nhforge.org/doc/nh/en/index.html#transactions – AlfeG