Nhibernate Merge с новым графом объектов Строка с данным идентификатором не существует - PullRequest
1 голос
/ 17 января 2011

Если я создаю новый родительский объект, а затем добавляю к нему новый дочерний объект и пытаюсь выполнить ISession.Merge (parent), я получаю исключение «Нет строки с данным идентификатором» для дочернего объекта.

Разве Merge не предполагает создание постоянного объекта, если он не найден в БД?Он создается только в том случае, если я объединю родительский элемент с пустой дочерней коллекцией.

Может быть, что-то не так в моих отображениях?
У меня есть это у ребенка:

<many-to-one class="Parent fetch="join" name="Parent">
  <column name="ParentId" />
</many-to-one>

И это у родителя:

<bag fetch="join" inverse="true" lazy="false" name="Childs" mutable="true">
  <key>
    <column name="ParentId" />
  </key>
  <one-to-many class="Child" />
</bag>

1 Ответ

3 голосов
/ 17 января 2011

Вы можете использовать cascade или объединить ребенка отдельно:

<bag fetch="join" inverse="true" lazy="false" name="Childs" cascade="all">
  ...
</bag>

Объединение детей отдельно:

foreach(Child child in parent.Children)
{
  session.Merge(child);
}

var mergedParent = session.Merge(parent);

На самом деле я не уверен, что произойдет, если дочерние элементы уже находятся в кэше сеанса, а родительский - нет. Возможно, вам нужно создать экземпляр со всеми объединенными данными самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...