NHibernate.LazyInitializationException:正在初始化[]-无法初始化代理-没有会话



ASP.NET站点
不断得到异常
LazyInitializationException:-无法初始化代理-没有会话

NHibernate.LazyInitializationException: Initializing[MyProj.MyClass#XXX]-Could not initialize proxy - no Session.   
at NHibernate.Proxy.AbstractLazyInitializer.Initialize()
at NHibernate.Proxy.DefaultLazyInitializer.Intercept(InvocationInfo info)
at MyClassProxy.get_MyProjerty()
  • 缓存
  • 加上延迟加载
  • 加上每个请求的会话关闭

我们缓存了NHibernate实体,但缓存ORM对象是一个危险的想法。

我们可以做以下

  • 将ORM实体对象转换为自定义受限的POCO(普通旧CLR对象(并将其用于缓存
  • 以下对于具有多对多或一对多关系的大型实体对象是危险的。
    • 禁用单个请求的延迟加载(如果可能(
    • 使用一些深度克隆来创建深度副本
  • 从上下文中分离ORM实体对象。但是惰性加载属性可以保持为null

请记住,有人我启用或禁用了懒惰加载,你会在很长一段时间内遇到麻烦。或者有人可能会以一种意想不到的方式管理会话生存期。或者,如果数据库连接中断,会话可能会损坏。

我还不知道什么人会选择解决这个问题。

最新更新