.NET Parallel.ForEach可能会混淆NHibernate上下文会话

时间:2013-06-11 18:58:35

标签: asp.net .net nhibernate parallel-processing

我有几个报告对象,如下所示:BaseReport,ChildReport1,ChildReport2和ChildReport3。报告可以实现IComplexParameterSupport接口。 ChildReport1,2和3都继承自BaseReport。

我的逻辑如下

  1. 使用SessionFactory打开NHibernate上下文
  2. 我使用递归从报告类型生成树以生成一种菜单。这来自父/子层次结构 - 多次调用数据库,每次验证报告类型并执行与报告定义相关的特定操作。
  3. 然后,我会检查报告对象是否为IComplexParameterSupport。
  4. 在某些情况下,当我知道报告实现了IComplexParameterSupport时,当我进行转换时,报表对象保持为空。这就像NHibernate的背景已经丢失。

        if(report as IComplexParameterisedSupport != null)
    
        {
           // logic here
        }
    
    

    只有在我之前使用Parallel.ForEach时,即在STEP 2上,才会发生这种情况。我在.NET 4.0上使用Web应用程序。是否有人在并行和NHibernate上下文会话中遇到类似的问题?

1 个答案:

答案 0 :(得分:1)

这是否意味着多个线程可以同时访问会话? 如果是这样,这就是问题,因为NHibernate的Session不是线程安全的。 见NHibernate thread safety with session