代码之家  ›  专栏  ›  技术社区  ›  jonnii

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

  •  6
  • jonnii  · 技术社区  · 16 年前

    我总是得到一个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);
        } 
    

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

    有什么想法吗?

    3 回复  |  直到 16 年前
        1
  •  4
  •   Community Reversed Engineer    7 年前

    只有一种习俗 DefaultSaveEventListener 使用以下配置Xml,不包含overidden或扩展行为的子类足以为我触发此异常:

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

    in this question .

    我错误地从 默认保存事件侦听器 而不是 DefaultSaveOrUpdateEventListener ,更改超类使这个问题对我来说消失了。

        2
  •  2
  •   Joe    15 年前

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

        3
  •  2
  •   Nifle Hassan Syed    13 年前

    我也有类似的问题。

    use ISession.Get() ISession.Load()