У меня есть простой класс, называемый «Родительский», и он содержит список дочерних объектов, которые называют его «Ребенок».Дети-сироты NHibernate при назначении нового «Ребенка» на «Родительский»
Существует простое отображение NHibernate между ними:
Mapping для ребенка
// Child mapping
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="X" namespace="X">
<class name="Child" table="Childs">
<id name="Id">
<generator class="guid" />
</id>
<property name="Value"/>
</class>
</hibernate-mapping>
Mapping для Родитель
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="X" namespace="X">
<class name="Parent" table="Parents">
<id name="Id">
<generator class="guid" />
</id>
<list name="Childs" lazy="false" cascade="all-delete-orphan">
<key column="ParentId" />
<index column="ChildIndex" />
<one-to-many class="Child"/>
</list>
</class>
</hibernate-mapping>
Так что в моем коде
IList<Child> NewChildObjectsList =....
Parent.Childs.Clear();
Parent.ChildObjectList = NewChildObjectsList;
Update(Parent);
Проблема заключается в том, что при обновлении родителя, родитель получает новые дочерние объекты, но существует «сирота объектов», чей родительский идентификатор не существует в Чайлдсе таблице [те старые список объектов ребенка элементы]
В самом деле если я делаю, и обновление только после списка клиринга и после того, как назначить новый список ребенка существует не возражает не сирота ...
IList<Child> NewChildObjectsList =....
Parent.Childs.Clear();
Update(Parent); // ClearList then update
Parent.Childs = NewChildObjectsList;
Update(Parent); // Add new list then update
Что может привести к этому? И как это исправить? Есть идеи?
почему вы устанавливаете 'Parent.Childs = NewChildObjectsList'? ясно недостаточно? – Firo
Ну, это мое «деловое дело» ... Иногда мне приходится добавлять полностью новый дочерний список к существующему родительскому объекту. – Novalis