Может ли nHibernate обновлять дочерние элементы в зависимости от идентификатора, а не в состоянии отслеживания «один ко многим»? - PullRequest
0 голосов
/ 11 февраля 2012

Я использую nHibernate 3 и Sharp Architecture 2.

Я бы хотел, чтобы nHibernate отключил идентификатор объекта вместо состояния, чтобы определить, является ли дочерний объект новым или нет.

В настоящее время это работает следующим образом:

  1. Загрузка объекта с дочерними элементами из nHibernate
  2. Отображение объекта и дочерних объектов в соответствующую модель представления MVC с дочерними элементами (также модели просмотра)
  3. Внесение изменений в модель представления и дочерние элементы
  4. Отображение модели представления и дочерних элементов обратно к сущности
  5. Вызов SaveOrUpdate (entity) в соответствующем хранилище
  6. Entityобновляется.Текущие дочерние элементы не связаны (удаление внешнего ключа для родителя (объекта)).Новые дети вставляются с разными идентификаторами.Связи внешнего ключа обновляются для новых дочерних элементов.

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

Проблема в том, что идентификаторы только что изменились для всех моих дочерних объектов.Все, на что они ссылались, теперь будет ссылаться на детей-сирот.Мне нужно это выполнить обновление вместо удаления и вставки для детей с тем же идентификатором, что и у существующего ребенка.

Есть ли способ сделать это?

Обновление:

Я действительно нашел решение моей первоначальной проблемы.AutoMapper запутался из-за игнорирования свойств идентификатора объекта.Мне пришлось создавать перегрузки конструктора для каждой сущности, чтобы передать идентификаторы, так как они защищены набором.Единственная проблема, с которой я столкнулся, это постоянные удаления.Если я пытаюсь использовать Cascade (). AllDeleteOrphan (), я получаю следующую ошибку при извлечении другой сущности, прикрепленной к родителю, которую я хочу получить до сохранения всего:

{"Коллекция с каскадом= \ "all-delete-orphan \" больше не использовался экземпляром объекта-владельца:

...