Как NHibernate определяет, вставить или обновить запись?
Когда используешь Session.SaveOrUpdate(myEntity);
Как NHibernate решает, как вставить новую запись или обновить существующую?
У меня проблемы при сохранении одного объекта в проекте S#arp. Он извлекается из хранилища, затем сохраняется в состоянии сеанса для пары веб-запросов, затем сохраняется обратно в базу данных с одним измененным свойством (не S#arp [DomainSignature]
).
Во время выполнения я сравнил объект, который скоро будет сохранен, со свежо извлеченной версией прямо из базы данных, используя Equals()
метод и который возвращает истину. Тем не менее, объект по-прежнему создает новую строку в базе данных.
В другом месте приложения это работает нормально, но я надеюсь на указатель того, как NHib работает с этим.
1 ответ
В принципе SaveOrUpdate()
ищет идентификатор. Если идентификатор присутствует, он обновит запись в базе данных. Если идентификатор отсутствует, он создаст новую запись.
Тем не менее, звучит так, будто у вас может быть что-то необычное в вашей сессии. Вы можете попробовать SaveOrUpdateCopy()
чтобы увидеть, решит ли это вашу проблему.