NHibernate.LazyInitializationException的根本原因是什么

时间:2015-02-27 02:33:25

标签: asp.net .net nhibernate

我支持通过NHibernate框架开发的项目。最近(仅偶尔),我仅在特定类上收到此错误NHibernate.LazyInitializationException。在我的情况下仅针对用户案例。我的完全例外是

  

NHibernate.LazyInitializationException [(null)] - 初始化[*******。Domain.EpmsUser#129] - 不能初始化代理 - 没有会话

我很清楚框架中的Lazy加载会随机更新数据。我很安静,不知道为什么我的会话只在我访问这个类时才会到期。

请分享此问题的根本原因,如果可能,可以提供一些提示/解决方案来解决问题。

1 个答案:

答案 0 :(得分:0)

问题简而言之:

  

Web应用程序分为(演示者/控制器操作,视图呈现),它们通常具有与网络相关的 生命周期 {{ 1}}。在Request期间,我们几乎可以随时加载持久我们的数据。
  这意味着我们应该保持与Request 生命周期 相关的NHibernate ISession 生命周期 >

在此处查看更多信息:

Effective NHibernate Session management for web apps

很少要检查

  • 找出会话初始化的位置以及关闭的位置
  • MVC有两个市长阶段 - 1)控制器动作2)视图渲染 - 如果我们不使用DTO - 依赖于会话的对象将需要保持打开直到视图完全呈现
  • 检查一些AOP的东西(太早或太晚)与一些"加载"会话结束之后或之前的对象