NHibernate.LazyInitializationException

时间:2009-07-14 15:01:18

标签: c# asp.net-mvc nhibernate fluent-nhibernate lazy-loading

我们偶尔会出现这个问题,但现在我每次都可以重现它。我在自定义构建的论坛上增加了一个视图计数器,这会导致错误:

  

NHibernate.LazyInitializationException:懒得初始化集合,没有关闭会话或会话

此对象中的另一个集合发生此错误。如果我添加:

.Not.LazyLoad()

对于我的Fluent映射,错误在我的项目周围移动。我一直禁止对对象的延迟加载,直到它没有延迟加载的地方,然后它抛出了这个错误:

  

NHibernate.LazyInitializationException:无法初始化代理 - 没有会话。

所以,然后我在懒惰的装载上取出了遗嘱,现在我又回到原点。当我递增此视图计数器时,它只会出错。这是我的基类保存代码的片段:

using (ISession session = GetSession())
using (ITransaction tx = session.BeginTransaction())
{
       session.SaveOrUpdate(entity);
       tx.Commit();
}

环顾四周,我在另一篇文章中读到这些交易可能会导致问题,但这是因为它们被放置在哪里。此代码扩展到与我的域对象(存储库类)分开的类。这是帖子:

hibernate: LazyInitializationException: could not initialize proxy

我不相信这是我的问题。这是第一个抛出错误的集合的流畅映射。还有其他几个类似的系列。

HasManyToMany(x => x.Votes)
    .WithTableName("PostVotes")
    .WithParentKeyColumn("PostId")
    .WithChildKeyColumn("VoteId");

2 个答案:

答案 0 :(得分:5)

对此问题的进一步研究表明,在单次回调服务器时,如果执行保存并获取,则需要刷新会话。我在保存后进行了冲洗,这似乎纠正了这个问题。

答案 1 :(得分:1)

检查该会话中是否没有加载任何其他对象。我有一个类似的情况发生,我会在没有任何延迟加载的对象上调用Save,它真的发送给我一个循环。为什么我会在非延迟加载的对象上出现此错误?

在我的情况下,我正在将几个其他对象加载到页面中,并且这些对象未正确映射。当我调用Save NHibernate会尝试在会话中同步并抛出错误。

尝试删除所有其他NHibernate,只留下此计数器更新。如果只有计数器没有发生错误,请慢慢将其添加回其他调用,直到错误返回为止。然后你就可以开始解决真正的罪魁祸首。