【问题标题】:NHibernate One-To-One Relationships not saving correctlyNHibernate 一对一关系未正确保存
【发布时间】:2011-04-10 08:14:39
【问题描述】:

我在保存具有一对一关系的实体时遇到问题。我只想保存父实体并保存子实体,但我必须分别保存。

这是我必须做的一个例子,否则孩子不会得救。

 var session = SessionProvider.OpenSession.Session;
            using (var tx = session.BeginTransaction())
            {
                try
                {
                    session.SaveOrUpdate(parent);
                        if (parent.Child.IsPersisted)
                        {
                            session.Update(parent.Child);
                        }
                        else
                        {      
                            session.Save(parent.Child);
                        }
                    }
}


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" assembly="xxx">
  <class name="Parent" polymorphism="explicit" table="Parent">
    <id name="Id" column="JointID" type="int">
      <generator class="native" />
    </id>
    <one-to-one name="Child" class="Child" />
  </class>
</hibernate-mapping>


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"
                   assembly="xxx">
  <class name="Child" xmlns="urn:nhibernate-mapping-2.2" polymorphism="explicit" table="Child">
    <id name="Id" column="JointID" type="int" unsaved-value="0">
      <generator class="native" />
    </id>
    <many-to-one name="Parent" column="JointID" insert="false" update="false" />
  </class>
</hibernate-mapping>

关于如何在不进行两次保存调用的情况下进行保存的任何想法?

当我按照下面的建议将关系设置为级联时,我得到外键约束错误。如果我使用 NProf 分析查询,它会尝试使用临时 id (-1) 作为插入语句中的 JointId,而不是新创建的父 id。 Parent 表中的 JointId 是 Identity 键,这可能是个问题?

【问题讨论】:

    标签: nhibernate nhibernate-mapping


    【解决方案1】:

    您需要在 &lt;one-to-one&gt; 映射上启用级联才能正常工作。

    类似:

    <one-to-one name="Child" class="Child" cascade="save-update" /> 
    

    您可以阅读各种级联设置here

    【讨论】:

    • 添加了有关此问题的更多详细信息。感谢您指出。
    • 您是否正确设置了子实体的父关联?您需要确保您正在执行以下操作: parent.Child = child AND child.Parent = parent;这可能是问题吗?
    • 我是否必须明确地这样做?我在保存之前尝试了parent.Child.Parent = parent 并且有同样的问题。
    • 看看:ayende.com/Blog/archive/2009/04/19/… 那里有一些关于一对一映射的优秀指导......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多