Как NHibernate определяет, вставить или обновить запись?

Когда используешь Session.SaveOrUpdate(myEntity); Как NHibernate решает, как вставить новую запись или обновить существующую?

У меня проблемы при сохранении одного объекта в проекте S#arp. Он извлекается из хранилища, затем сохраняется в состоянии сеанса для пары веб-запросов, затем сохраняется обратно в базу данных с одним измененным свойством (не S#arp [DomainSignature]).

Во время выполнения я сравнил объект, который скоро будет сохранен, со свежо извлеченной версией прямо из базы данных, используя Equals() метод и который возвращает истину. Тем не менее, объект по-прежнему создает новую строку в базе данных.

В другом месте приложения это работает нормально, но я надеюсь на указатель того, как NHib работает с этим.

1 ответ

Решение

В принципе SaveOrUpdate() ищет идентификатор. Если идентификатор присутствует, он обновит запись в базе данных. Если идентификатор отсутствует, он создаст новую запись.

Тем не менее, звучит так, будто у вас может быть что-то необычное в вашей сессии. Вы можете попробовать SaveOrUpdateCopy() чтобы увидеть, решит ли это вашу проблему.

Другие вопросы по тегам