4

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

我的逻辑如下

  1. 使用 SessionFactory 打开 NHibernate 上下文
  2. 我使用递归从报告类型生成树以生成一种菜单。这来自父/子层次结构 - 多次调用数据库,每次验证报告类型并执行与报告定义相关的特定操作。
  3. 然后,我会检查报告对象是否为 IComplexParameterSupport。

在某些情况下,当我知道报表实现了 IComplexParameterSupport 时,当我进行强制转换时,报表对象保持为空。这就像 NHibernate 的上下文已经丢失了。

    如果(报告为 IComplexParameterisedSupport != null)

    {
       // 这里的逻辑
    }

这只发生在我以前使用 Parallel.ForEach 时,即在 STEP 2 上。我在 .NET 4.0 上使用 Web 应用程序。是否有人对并行性和 NHibernate 上下文会话有类似的问题?

4

1 回答 1

1

这是否意味着会话可以被多个线程同时访问?如果是这样,这就是问题所在,因为 NHibernate 的 Session 不是线程安全的。请参阅NHibernate 线程安全与会话

于 2013-06-11T20:43:00.793 回答