asp.net - .NET Parallel.ForEach 可能会弄乱 NHibernate 上下文 session

标签 asp.net .net nhibernate parallel-processing

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

我的逻辑如下

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

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

    如果(报告为 IComplexParameterisedSupport != null)

    {
    //这里的逻辑
    }

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

    最佳答案

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

    关于asp.net - .NET Parallel.ForEach 可能会弄乱 NHibernate 上下文 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17051711/

    相关文章:

    c# - 如何过滤 asp.net core 项目上的列表

    asp.net - 在 ASP.NET 中实现 "Remember me"功能

    mysql - 多行数据读取器

    c# - 有谁知道为什么我从 NHibernate/NH Profiler 收到这个警告?

    sql-server - select N + 1 比 eager join 更好吗?

    javascript - Ajax 文件上传的奇怪问题(jQuery、ASP.Net MVC)

    asp.net - URI 中复杂类型的 WebAPI 帮助页面

    c# - 选择具有多个 IP 时 HTTP 请求使用的 IP (.NET)

    c# - 如何在 C++/CLI 中创建 C# 事件处理程序?

    nhibernate - 如果之前已使用 Get 检索过该实体,则无法合并具有复合 Id 的实体