0
我在保存一對一關係的實體時遇到問題。我只想保存父實體並讓孩子保存,但我不得不另存兩個文件。NHibernate一對一關係不能正確保存
這是我不得不做的一個例子,否則孩子沒有保存。
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>
任何想法,我怎麼能省下來,而不必做兩個保存調用?
當我將關係設置爲如下建議的級聯時,我得到外鍵約束錯誤。如果我用NHProf分析查詢,它試圖在insert語句中使用臨時id(-1)作爲JointId,而不是新創建的父ID。 父表中的JointId是身份密鑰,也許這是一個問題?
增加了對此問題的更多詳細信息。感謝您指出。 – Dan 2010-09-09 17:18:38
您是否將您的孩子實體的父母關係設置爲財產?你需要確保你做的是這樣的:parent.Child = child AND child.Parent = parent;這可能是問題嗎? – DanP 2010-09-09 17:31:33
我是否必須明確地做到這一點?我在保存之前嘗試過'parent.Child.Parent = parent',並且存在相同的問題。 – Dan 2010-09-10 10:09:39