2

我正在使用单个会话,我的应用程序包含不同的模块,并且从会话中获取的对象被保留。当我从任何模块调用 Session.Clear 以刷新会话或实体时。在获取任何其他模块中的子实体时,我收到异常“无法延迟初始化 - 没有关闭会话或会话” 。

[LazyInitializationException] 无法延迟初始化角色集合:Application.Modules.Repository.childRepository,没有会话或会话已关闭

这就是我创建 Session 工厂和 Session 的方式:

var createdSessionFactory = Fluently.Configure(configuration)
                                          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<DMProgram>())
                                          .ExposeConfiguration(c => c.SetProperty("command_timeout", "500"))
                                          .BuildSessionFactory();


ISession Session = NHibernateConfiguration.SessionFactory.OpenSession();
4

1 回答 1

3

案例:当我们从会话中获取对象(A)时。该对象有一些延迟加载的集合(B)。您关闭或清除会话。现在您正在尝试获取集合(B)。确保您收到此错误。

原因:因为会话不知道父对象(A)。

解决方案:您需要保持会话,或者您可以急切负载收集(B)。

于 2012-11-27T08:18:05.420 回答