NHibernate не обновляет дочернюю сущность - PullRequest
1 голос
/ 12 июля 2011

Я столкнулся с проблемой при попытке обновить дочерний элемент в родительском классе

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 не сохраняется.

Примечание: если другие поля в родительском поле изменяются, оно обновляется в БД.

Обновление:

<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 голосов
/ 12 июля 2011

Я думаю, это проблема с отображением, попробуйте это:

<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();
}
0 голосов
/ 12 июля 2011

Я не вижу ваш файл сопоставления, но есть ли у вас атрибут cascade в вашей дочерней коллекции, установленный в родительском файле сопоставления?

...