Miałem metodę z wieloma wyzwalaczami, które używały sesji nHibernate, działało, było w porządku. Ale musiałem zreorganizować tę metodę, wyodrębniając metodę z zawartości wewnątrz pętli, z powodów wielowątkowych. Potem stworzyłem klasę tą metodą. To jest jak normalna refaktoryzacja, ale sesja nHibernate w tym wywołaniu metody jest zerwana, bez kontekstu, w żadnym momencie jej nie sfinalizowałem. Czy występują problemy z wielowątkowością? Nawet gdy mam tylko jeszcze jeden wątek, mam ten sam problem.nHibernate session i wielowątkowość
Używam sesji nHibernate poprzez wzorzec SessionFactory i Façade, to znaczy, sesja nie jest polem tych obiektów, jest globalna w SessionFactory.
czyni go nieco bardziej jasne:
PRZED:
Method()
{
... persistence calls
foreach(Thing..)
{
...persistence calls for each thing (1)
}
...
}
PO:
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
}
Nasza nHibernate Session Factory jest zorientowana na wątki i przechowuje/pobiera sesję nHibernate na wątek. Jest on teraz pracuje ładnie;)
dzięki Aleksey. Będę miał problemy, aby to zrobić (praca z inną sesją), ponieważ narusza mój projekt, myślę o zapomnieniu o tym wielowątkowym. –
w rzeczywistości moja fabryka sesji jest solidna i może przechowywać sesję w wątku, jej działanie: D –
Zaktualizowany link do dokumentacji http://nhforge.org/doc/nh/en/index.html#transactions – AlfeG