nhibernate - проблема с объединением коллекций - PullRequest
1 голос
/ 21 июня 2010

У меня есть отношения родитель / ребенок, и у ребенка есть составной идентификатор

Родитель

    <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) Получить родитель изБД, закрыть сеанс, передать Parent из службы в клиент. 2) Когда Parent вернулся из клиента, сохранить его и всех его дочерних элементов в БД в новом сеансе

На шаге 2 я вызываю var merged= Session.Merge (product);

Я использую Merge (), потому что это кажется единственным способом заставить NHib обрабатывать добавленные / удаленные элементы в дочерней коллекции. НО nHibernate сбрасывает все идентификаторы во вновь добавленных дочерних элементах,так что у меня есть новые дети с ParentId == 0 и ChildId == 0. Поэтому вопрос - как сказать NHibernate, чтобы сохранить идентификаторы от сущности, которая передается в Merge ()? .. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 21 июня 2010

Ваше отображение (и модель класса) неверно.

Ребенок должен иметь ссылку на Parent, а не Id. И отображение должно быть <key-many-to-one/>

...