【问题标题】:failed to lazily initialize - no session or session was closed懒惰初始化失败 - 没有会话或会话被关闭
【发布时间】:2012-10-26 13:23:56
【问题描述】:

我正在使用单个会话,我的应用程序包含不同的模块,并且从会话中获取的对象被保留。当我从任何模块调用 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();

【问题讨论】:

  • 我们能看到会话创建代码吗?
  • 为什么你认为Session.Clear() 会刷新会话或实体?它实际上会清除 Session 中的所有对象,并会中断所有延迟加载。
  • 如果我在创建 Session 时做错了什么,请告诉我。

标签: nhibernate c#-4.0


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2014-11-02
    • 2011-03-31
    • 2021-06-15
    • 2016-11-10
    相关资源
    最近更新 更多