我正在编写一个应用程序,并最终将它保存到数据库中。但是,如果有人能帮助我指出正确的方向,我会遇到一些问题,并且正在徘徊。NHibernate会话通过多线程访问
在我的应用程序加载过程中,我启动了一个NHibernate初始化线程,该初始化线程初始化NHibernate,然后触发3个独立的线程来加载3个对象,以便分离和优化加载时间。
我最初在这些线程的每一个中创建一个临时会话,以便从数据库中查询对象;然而,我遇到了访问我的对象的一个集合的问题,说一个会话没有打开或者它已经关闭。我有一个静态会话,可以在整个Windows应用程序中全局访问,当它为集合调用GetEnumerator时,此会话的状态仍处于打开状态。
我相信它与在初始化过程中线程的不同会话中加载的Intersection相关的事实有关。从同一会话中加载所有对象都可以正常工作;然而,我会偶尔遇到异常,并以非线程安全方式使用会话时发生错误。
我的问题是这样的。有没有办法将会话“合并”到我的全局会话中?我能做些什么来设置Intersection类到它有一个打开的会话为了加载集合?是否需要在主线程中打开静态全局程序会话的会话?或者我将无法将我的init进程中3个不同类的加载线程分成3个独立的线程?
我最后一次检查,NHibernate的会议分别不是线程安全的。 –
是的,我知道这一点。有什么办法可以将会话与另一个会话合并,所以线程A知道从线程B加载到会话中的对象?否则,有没有办法解决我的收藏访问在一个对象? –
您可以将从一个会话加载的对象“合并”到另一个会话中。我不太确定整个会议。 –