NHibernate在更新时删除一对多关联中的FK

时间:2013-02-15 13:13:32

标签: nhibernate

首先,这是我的关系

<class name="ServiceStep">
<id name="Id">
  <generator class="guid.comb"/>
</id>
 <set name="AdditionalInfoRows" cascade="save-update" >
  <key column="ServiceStepId"/>
  <one-to-many class="AdditionalInfoRow"/>
</set>

<class name="AdditionalInfoRow">
<id name="Id">
  <generator class="guid.comb"/>
</id>
<set name="AdditionalInfos" cascade="save-update" >
  <key column="AdditionInfoRowId"/>
  <one-to-many class="AdditionalInfo"/>
</set>

现在,当我创建新的ServiceStep并将AdditionalInfoRows添加到其中时,一切正常并且它被正确保留。

问题在于更新。我加载ServiceStep并使用AdditionalInfoRows正确加载Set。在我的应用程序中,我向此集添加了新的AdditionalInfoRows。然后我在ServiceStep上调用SaveOrUpdate。新addes AdditionalInfoRows正确保留,但我的原始列表丢失了连接。应该指向ServiceStep的AdditionalInfoRows中的FK由NHibernate设置为NULL。

希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

您可以尝试在AdditionalInfoRow映射中包含类似内容:

<many-to-one name="ServiceStep" class="ServiceStep">
  <column name="ServiceStepId" not-null="true"/>
</many-to-one>

看起来像,

<class name="AdditionalInfoRow">
    <id name="Id">
        <generator class="guid.comb"/>
    </id>
    <set name="AdditionalInfos" cascade="save-update" >
    <key column="AdditionInfoRowId"/>
        <one-to-many class="AdditionalInfo"/>
    </set>
    <many-to-one name="ServiceStep" class="ServiceStep">
        <column name="ServiceStepId" not-null="true"/>
    </many-to-one>
</class>