我正在使用单个 session ,我的应用程序包含不同的模块,并且从 session 中获取的对象被保留。当我从任何模块调用 Session.Clear 来刷新 session 或实体时。在获取任何其他模块中的子实体时,我收到异常“无法延迟初始化 - 没有 session 或 session 被关闭”。
[LazyInitializationException] 未能延迟初始化角色集合:Application.Modules.Repository.childRepository,没有 session 或 session 已关闭
这就是我创建 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();
最佳答案
案例:当我们从 session 中获取对象(A)时。该对象有一些延迟加载的集合(B)。您关闭或清除 session 。现在你正在尝试获取集合(B)。确保您收到此错误。
原因:因为 session 不知道父对象(A)。
解决方案:您需要保留 session ,或者可以预先加载集合(B)。
关于nhibernate - 延迟初始化失败 - 没有 session 或 session 已关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13087822/