当前位置:  开发笔记 > 编程语言 > 正文

nHibernate会话和多线程

如何解决《nHibernate会话和多线程》经验,为你挑选了1个好方法。

我有一个方法,有很多持久性调用使用nHibernate会话,它工作,没关系.但是出于多线程的原因,我需要重构这个方法,从循环内的内容中提取方法.然后我用这个方法创建了一个类.它就像一个正常的重构,但是这个方法调用中的nHibernate会话被破坏了,没有上下文,我没有随时完成它.多线程有nHibernate问题吗?即使我只有一个线程正在执行,我也有同样的问题.

我通过SessionFactory和Façade模式使用nHibernate Session,这意味着,会话不是这些对象的字段,它在SessionFactory是全局的.


让它更清楚一点:

之前:

Method()
{
... persistence calls
foreach(Thing..)
{
...persistence calls for each thing (1)
}
...
}

后:

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会话.它现在很好用;)



1> axk..:

通过设计,会话在NHibernate 中不是线程安全的.所以只要你只有一个线程使用会话就应该没问题.

我不确定你是什么东西,但是如果你在原始线程中创建的同一个会话中有一些持久性调用- 这很可能是你的问题的原因,你可以在你的新创建一个单独的会话如果我的假设是真的,那么它将成为每个线程的一个会话.

NHibernate参考在10.2节中有它

http://nhibernate.info/doc/nh/en/index.html#transactions

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有