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

C# NHibernate:传递给save()和cascade的未初始化代理,c#,nhibernate,C#,Nhibernate,调用session.Save()时,我不断收到一个NHibernate.PersistentObject异常,这是由于传递给Save()的未初始化代理造成的。如果我摆弄我的层叠设置,我可以让它消失,但子对象不会被保存 我发现的唯一其他修复方法是将以下内容添加到我的DefaultSaveEventListener中 protected override bool ReassociateIfUninitializedProxy(object obj, global::NHibernate.E

调用session.Save()时,我不断收到一个NHibernate.PersistentObject异常,这是由于传递给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);
    } 
这显然不是一个理想的解决方案


有什么想法吗?

您是否正在尝试处理根聚合实体列表中的子对象?如果是,则需要使用根目录,遍历到子目录,进行更改,然后保存根目录,而不是子目录。

我遇到了类似的问题


修复方法很简单:
使用ISession.Get()
而不是
ISession.Load()
使用以下配置Xml,仅存在一个自定义的
DefaultSaveEventListener
子类,该子类不包含过度或扩展行为,就足以触发此异常:

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

我将继续这一讨论

更新:


我错误地从
DefaultSaveEventListener
派生,而不是
DefaultSaveOrUpdateEventListener
,更改超类使我解决了这个问题。

你有没有找到更好的解决方案?目前,我不得不使用您提到的覆盖ReassociateFunInitializedProxy的方法。我还没有找到解决方案……您是否看到所有对象或某个特定对象都存在此问题。如果它是一个特定的对象,你能用你的模型和映射更新这个问题吗?我不再做那个项目了,但我认为这可能是原因。我收到了这个错误,并且我没有对ISession.Load或它的任何重载的引用。啊,愚蠢的我,我是从
DefaultSaveEventListener
而不是
DefaultSaveOrUpdateEventListener
派生的,改变超类使这个问题消失了。+1-这就是我得到这个错误的原因-和修复方法。我建议把你的评论移到你的答案上,因为这很有帮助,而且是有人可能会犯这个错误的准确原因。