Я использую nHibernate 3 и Sharp Architecture 2.
Я бы хотел, чтобы nHibernate отключил идентификатор объекта вместо состояния, чтобы определить, является ли дочерний объект новым или нет.
В настоящее время это работает следующим образом:
- Загрузка объекта с дочерними элементами из nHibernate
- Отображение объекта и дочерних объектов в соответствующую модель представления MVC с дочерними элементами (также модели просмотра)
- Внесение изменений в модель представления и дочерние элементы
- Отображение модели представления и дочерних элементов обратно к сущности
- Вызов SaveOrUpdate (entity) в соответствующем хранилище
- Entityобновляется.Текущие дочерние элементы не связаны (удаление внешнего ключа для родителя (объекта)).Новые дети вставляются с разными идентификаторами.Связи внешнего ключа обновляются для новых дочерних элементов.
Все сопоставления выполняются с использованием автоматического преобразователя, при этом свойства идентификатора игнорируются, где это применимо.Сопоставленный объект и дочерние объекты сохраняют свои прежние поля идентификаторов.Насколько я понимаю, этот автомат сбивает с толку nhibernate ...
Проблема в том, что идентификаторы только что изменились для всех моих дочерних объектов.Все, на что они ссылались, теперь будет ссылаться на детей-сирот.Мне нужно это выполнить обновление вместо удаления и вставки для детей с тем же идентификатором, что и у существующего ребенка.
Есть ли способ сделать это?
Обновление:
Я действительно нашел решение моей первоначальной проблемы.AutoMapper запутался из-за игнорирования свойств идентификатора объекта.Мне пришлось создавать перегрузки конструктора для каждой сущности, чтобы передать идентификаторы, так как они защищены набором.Единственная проблема, с которой я столкнулся, это постоянные удаления.Если я пытаюсь использовать Cascade (). AllDeleteOrphan (), я получаю следующую ошибку при извлечении другой сущности, прикрепленной к родителю, которую я хочу получить до сохранения всего:
{"Коллекция с каскадом= \ "all-delete-orphan \" больше не использовался экземпляром объекта-владельца: