【发布时间】: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