【问题标题】:NHibernate.LazyInitializationException: Initializing[]-Could not initialize proxy - no SessionNHibernate.LazyInitializationException: Initializing[] - 无法初始化代理 - 没有会话
【发布时间】:2021-05-06 10:31:16
【问题描述】:

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()

【问题讨论】:

标签: c# asp.net .net orm nhibernate


【解决方案1】:
  • 缓存
  • 加上延迟加载
  • 加上每个请求的会话关闭

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

我们可以这样做

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

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

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

【讨论】:

    猜你喜欢
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2018-09-28
    相关资源
    最近更新 更多