我有一個使用nHibernate會話的很多持久性調用的方法,它的工作,沒問題。但是我需要重構這個方法,從一個循環內的一個內容中提取一個方法,用於多線程的原因。然後我用這種方法創建了一個類。它就像一個正常的重構,但是這個方法調用中的nHibernate會話被破壞,沒有上下文,我沒有在任何時候敲定它。 nHibernate有多線程問題嗎?即使我只有一個線程執行,我也有同樣的問題。nHibernate會話和多線程
我通過SessionFactory和Façade模式使用nHibernate Session,它表示會話不是這些對象的字段,它在SessionFactory中是全局的。
使其成爲一點點清晰:
BEFORE:
Method()
{
... persistence calls
foreach(Thing..)
{
...persistence calls for each thing (1)
}
...
}
AFTER:
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
}
我們的nHibernate會話工廠是線程感知的,併爲每個線程存儲/檢索nHibernate會話。它現在工作很好;)
謝謝阿列克謝。我會遇到問題(與另一個會話一起工作),因爲它違反了我的設計,所以我正在考慮修改這個多線程的東西。 – 2008-10-28 12:03:37