8

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

NHibernate.LazyInitializationException: 延迟初始化集合失败,没有会话或会话被关闭

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

.Not.LazyLoad()

对于我的 Fluent 映射,错误在我的项目中发生了变化。我一直禁用对象的延迟加载,直到它到达没有延迟加载的位置,然后它抛出了这个错误:

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

所以,然后我在我的延迟加载中去掉了那些不,现在我又回到了原点。只有当我增加这个视图计数器时才会出错。这是我的基类保存代码的片段:

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

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

休眠:LazyInitializationException:无法初始化代理

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

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

2 回答 2

5

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

于 2009-11-10T16:44:06.670 回答
1

检查该会话中是否没有加载任何其他对象。我遇到过类似的情况,我会在没有任何延迟加载的对象上调用 Save ,它确实让我陷入了循环。为什么我会在非延迟加载的对象上收到此错误?

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

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

于 2009-07-14T16:45:51.627 回答