更新时,nhibernate集合更新fk引用在子节点中变为null

时间:2010-12-31 15:16:37

标签: nhibernate

我有父母和孩子,插入就好了!如果我检索父项(以及子集合)并修改子项的值并执行session.SaveOrUpdate(Digikeyset),则所有值都会在子记录中更新,但问题是FK列在子项中更新为NULL。

<class name="Digikeyset" table="`digikeyset`" lazy="false">
<id name="Iddigikeyset" column="`iddigikeyset`" type="int">
  <generator class="native" />
 </id>
<property type="string" length="100" name="Mpart" column="`mpart`" />
<property type="int" name="Boardqty" column="`boardqty`" />
<bag name="Fkdigirowset" inverse="false" lazy="false" cascade="all" >
    <key column="`iddigiset`" />
  <one-to-many class="bomorderDal.Digikeyrow,bomorderDal" />
</bag>  </class>

<class name="Digikeyrow" table="`digikeyrow`" lazy="false">
<id name="Iddigikeyrow" column="`iddigikeyrow`" type="int">
  <generator class="native" />
</id>
<property type="Boolean" name="Ispartselected" column="`ispartselected`" />
<property type="Boolean" name="Ispartfound" column="`ispartfound`" />
<many-to-one name="Iddigiset" cascade="save-update" column="`iddigiset`" />
  </class>

2 个答案:

答案 0 :(得分:0)

不确定这是否是问题,但如果您修改了值,则应该刷新而不是SaveOrUpdate。 “保存”用于新对象,“更新”用于未附加到会话的现有对象。

所以而不是:

session.SaveOrUpdate(Digikeyset)

尝试:

session.Flush()

答案 1 :(得分:0)

感谢您的建议。曾尝试过建议的选项,但没有运气。

终于得到了结果。删除

<many-to-one name="Iddigiset" cascade="save-update" column="`iddigiset`" /> 
从孩子那里得到了诀窍。顺便说一句,我正在使用中等信任环境所需的Nhibernate库。