NHibernate没有更新子实体

时间:2011-07-12 14:59:06

标签: hibernate nhibernate nhibernate-mapping

我在尝试更新Parent类

中的子项时遇到问题
public class Parent
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual IList<Child> MyChildren { get; set; }
    }
    public class Child
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual Parent MyParent { get; set; }
    }

我所做的是获取MyChildren列表中的一项并对其进行修改,但是当从会话中调用SaveOrUpdate方法时,MyClildren没有被保存。

注意:如果修改了父级中的其他字段,则会在DB中进行更新。

更新

<class name="Parent" table="Parent" lazy="true">
    <id name="id" column="ID" type="int">
      <generator class="identity" />
    </id>

      <bag cascade="all" lazy="true" name="MyChildren">
        <key column="ID"/>
        <one-to-many class="SND.Domain.Model.Child" />
      </bag>
</class>

<class name="Child" table="Child" lazy="true">
    <id name="id" column="ID" type="int">
      <generator class="identity" />
    </id>
    <!-- Here i have another reference -->
     <many-to-one name="AnotherEntity" class="SND.Domain.Model.AnotherEntity" column="entity_ID"/>

    <property name="Name" column="Name" type="string" not-null="false" />
</class>

谢谢, 佩德罗

2 个答案:

答案 0 :(得分:0)

我看不到您的映射文件,但您在父映射文件中的子集合集上是否有cascade属性?

答案 1 :(得分:0)

我认为这是一个映射问题,试试这个:

<bag  generic="true" cascade="all" inverse="false" name="MyChildren">
    <key column="ID"/>
    <one-to-many class="SND.Domain.Model.Child" />
</bag>

<强> UPDATE1

using (var session = SessionFactory.OpenSession())
using (var tx = session.BeginTransaction())
{

    session.SaveOrUpdate( ... );
    tx.Commit();
}