NHibernate LazyInitializationException ..如何预防?

Dav*_*Dev 10 nhibernate

我在生产Web服务器上收到以下错误:

NHibernate.LazyInitializationException
: 
Initializing[Domain.Entities.AudienceTypes.Region#4]-failed to lazily initialize a 
collection of role: Domain.Entities.AudienceTypes.Region.PeerGroups, 
no session or session was closed
Run Code Online (Sandbox Code Playgroud)

这不好.让应用程序再次运行的唯一方法是重置IIS,这不是一个真正的选择.这是什么意思?我该怎样预防呢?

小智 10

要避免此问题,您需要在Region映射类中更改PeerGroups的引用,如下所示

References(x => x.PeerGroupId, "PeerGroupId").Fetch.Join();

添加Fetch.Join()将阻止LazyInitializationException.


luj*_*jop 9

默认情况下,关系是懒惰的.这意味着只有在访问保存关系的属性时才会执行加载关系的SQL查询.

问题是如果你访问一个懒惰的属性,之前从未调用过,会话关闭然后就会出现错误.你需要解决方案:

  • 完成之前不要关闭会话
  • 在关闭会话之前,访问稍后将使用的所有延迟属性.