NHibernate:未初始化的代理传递给save()和cascade

时间:2008-10-15 16:34:36

标签: c# nhibernate

我在调用session.Save()时遇到NHibernate.PersistentObjectException,这是由于未初始化的代理传递给save()。如果我摆弄我的级联设置,我可以让它消失,但是后来没有保存子对象。

我找到的唯一其他修复方法是将以下内容添加到DefaultSaveEventListener中。

    protected override bool ReassociateIfUninitializedProxy(object obj, global::NHibernate.Engine.ISessionImplementor source)
    {
        if (!NHibernateUtil.IsInitialized(obj))
            NHibernateUtil.Initialize(obj);

        return base.ReassociateIfUninitializedProxy(obj, source);
    } 

这显然不是一个理想的解决方案。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

仅使用以下配置Xml,仅存在一个不包含覆盖或扩展行为的自定义DefaultSaveEventListener子类就足以触发此异常:

<event type="save-update">
    <listener class="MyNamespace.MyCustomSaveEventListener, MyAssembly" />
</event>

我正在继续讨论in this question

<强>更新

我错误地从DefaultSaveEventListener而不是DefaultSaveOrUpdateEventListener派生出来,改变超类让我的问题消失了。

答案 1 :(得分:2)

您是否尝试使用根聚合实体上的列表中的子对象?如果你是,你需要使用root,遍历孩子,进行更改,并保存 root ,而不是孩子。

答案 2 :(得分:2)

我遇到了类似的问题。

修复很简单:use ISession.Get()而非ISession.Load()