【问题标题】:LazyInitializationException in ASP.NET app with NHibernate带有 NHibernate 的 ASP.NET 应用程序中的 LazyInitializationException
【发布时间】:2010-11-28 04:55:48
【问题描述】:

在 ASP.NET 4 中使用 NHibernate。

我在检索对象时没有遇到任何问题,但我只是遇到了我无法弄清楚的嵌套对象的问题。

我正在使用 lazy=true,当访问延迟加载集合时,我收到消息:

Initializing[type#3]-failed to lazily initialize a collection of role: [type], no session or session was closed

即使我在访问对象之前立即调用 SessionFactory.OpenSession(),也没有什么区别。我还尝试在 using ISession 块中访问集合,但没有成功。

编辑添加 - 我确实在 web.config 中设置了 current_session_context_class= web,并且我在 BeginRequest 上使用 CurrentSessionContext.Bind。

谁能给点建议?

不是 MVC 应用

我读到这个 ​​- 不知道它有多准确,它是 Hibernate: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2878

它说明了多对多关系中的错误。

这是我的 HBM 映射:

<bag name="Objects" table="ObjectInstance" cascade="all" lazy="true">
  <key column="branchId" />
  <many-to-many class="InventoryObjectInstance" column="objectInstanceId" />
</bag>

【问题讨论】:

    标签: asp.net nhibernate


    【解决方案1】:

    在您执行一些保存/更新操作后会发生这种情况吗?您在何时何地关闭会话?对我来说,听起来您在保存调用之后立即关闭会话,或者在网页呈现之前以其他方法关闭会话。换句话说,确保您使用的是 Open Session in View 模式并仅在当前 Web 请求结束时关闭会话。你也可以看看这个post

    【讨论】:

    • 干杯丹尼斯。不,没有保存操作,正如我所说,即使在调用之前显式创建会话仍然会给我这个异常。
    • 您不应该重新打开会话 b/c 在这种情况下,它是一个不同的会话,不能在那些期望旧会话的对象中重用 - 您必须在当前请求生命周期。您只需要找到正在关闭会话的那些代码块(使用,显式调用 .Close() 方法)并将其移动到 Global.asax codeproject.com/KB/architecture/NHibernateBestPractices.aspx 中的 EndRequest
    • 发现了一个隐藏的脏 using 语句,我不知何故错过了。谢谢大家,为帮助喝彩。
    【解决方案2】:

    检索对象图时,它们会保留对生成它们的会话的引用。他们使用该会话来延迟加载其属性。如果原始会话已关闭,您将在尝试访问它们时收到此错误(或类似错误)。打开一个新会话将无济于事。

    您可以尝试查找原始请求会话的关闭位置并停止它。你有同样的要求吗?如果您无法尝试将您的对象连接到一个新会话——我认为它是Session.Lock(YourObject)。或者,您可以从新会话中再次检索该对象。

    【讨论】:

    • 仍在同一个会话中,并且我已经中断了所有会话已关闭且未被触发的代码。
    【解决方案3】:

    由于某种原因,当您调用 SessionFactory.OpenSession() 时,您将获得一个新的 ISession。您是在 using 块中首次使用会话包装对它的访问吗?你为什么还要再次调用 OpenSession —— 对会话的引用发生了什么?

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 2012-08-27
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      相关资源
      最近更新 更多