多线程场景中的NHibernate抛出错误

多线程场景中的NHibernate抛出错误,nhibernate,Nhibernate,当我的Nhibernate代码进行负载测试时,我遇到了问题。我使用的是Nhibernate 3.1版本,Nhibernate的使用通过WCF服务公开。它在单线程场景中正常工作,并且在进行负载测试时会崩溃并抛出多个错误。 以下是负载测试期间引发的一些错误 1) NHibernate.DuplicateMappingException:重复类/实体映射 2) System.ObjectDisposedException:会话已关闭! 对象名称:“ISession”。在NHibernate.Impl.

当我的Nhibernate代码进行负载测试时,我遇到了问题。我使用的是Nhibernate 3.1版本,Nhibernate的使用通过WCF服务公开。它在单线程场景中正常工作,并且在进行负载测试时会崩溃并抛出多个错误。 以下是负载测试期间引发的一些错误

1)
NHibernate.DuplicateMappingException:重复类/实体映射
2)
System.ObjectDisposedException:会话已关闭!
对象名称:“ISession”。在NHibernate.Impl.AbstractSessionImpl.ErrorIfClosed()上
在NHibernate.Impl.AbstractSessionImpl.CheckAndUpdateSessionStatus()上
在NHibernate.Impl.SessionImpl.get\u Batcher()上
是因为我跨越了多个线程的单个会话吗

我使用了上下文会话,但没有太大帮助


有人能帮我找到解决方案吗?

您应该为每个线程创建一个会话。每次生成线程时,请为其创建会话,并在线程期间保持其打开状态。

是的,不要跨线程使用会话。可能是的副本。由于您使用的是WCF,如果您的请求有多个线程,则应为每个请求创建一个会话…:S然后为每个线程创建会话。为每个线程创建会话的最佳方法是什么?如果我们使用服务行为属性“[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]或在Nhibernate代码中进行任何其他更改,可以吗?