我正在使用单个会话,我的应用程序包含不同的模块,并保留从会话中提取的对象。当我从任何模块调用Session.Clear来刷新会话或实体时。我在任何其他模块中获取子实体时遇到异常“懒得初始化 - 没有会话或会话关闭”。
[LazyInitializationException]无法懒惰地初始化角色集合:Application.Modules.Repository.childRepository,没有关闭会话或会话
这是我如何创建会话工厂和会话:
var createdSessionFactory = Fluently.Configure(configuration)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<DMProgram>())
.ExposeConfiguration(c => c.SetProperty("command_timeout", "500"))
.BuildSessionFactory();
ISession Session = NHibernateConfiguration.SessionFactory.OpenSession();
答案 0 :(得分:3)
案例:当我们从会话中获取对象(A)时。该对象有一些延迟加载的集合(B)。你关闭或清除会话。现在你想要收集(B)。确定你得到这个错误。
原因:因为会话不知道父对象(A)。
解决方案:您需要保持会话,或者您可以急切地收集负载(B)。