У меня есть родитель/ребенок отношение, и ребенок имеют композитный идентификаторNHibernate - проблема с сливающейся коллекцией
Родитель
<id name="Id" type="Int32">
<generator class="identity" />
</id>
<set name="Children" table="CTable" cascade="all-delete-orphan" inverse="true" lazy="false" >
<key column="ParentId"/>
<one-to-many class="ChildrenClass"/>
</set>
Детских
<composite-id unsaved-value="none">
<key-property name="ParentId"/>
<key-property name="ChildId"/>
</composite-id>
Что я хочу: 1) Получить Родительский из базы данных, закройте сеанс, передайте родителя от службы к клиенту 2) Когда родитель вернулся с клиента, сохраните его и все его дочерние элементы в БД, в новая сессия
На шаге 2 я вызываю var merged = Session.Merge (продукт);
Я использую Merge(), потому что это единственный способ сделать добавленные/удаленные элементы NHib в дочерней коллекции .. НО nHibernate сбрасывает все id-s в новых дочерних элементах, поэтому у меня есть новые дети с ParentId == 0 и ChildId == 0. Поэтому возникает вопрос: как сообщить NHibernate о продолжении идентификаторов от объекта, который передается в Merge()? .. Пожалуйста, помогите.
Спасибо за ваш ответ! Если я добавлю ссылку Child для родителя, как я могу сохранить сбор детей в родительском? Когда присутствуют ссылки Parent.Children & Child.Parent, это приводит к исключению StackOverflowException (очевидно). Я хотел бы иметь набор дочерних элементов в родительском объекте, чтобы я мог перемещаться по ним. Возможно ли это? – Dmitry
«Очевидно»? Вы неправы. Двунаправленные отношения полностью поддерживаются NHibernate. Я предлагаю вам сначала прочитать документы. –
Диего, мне удалось заставить его работать, не знаю, почему этого не произошло в первый раз. Благодаря! – Dmitry