Отслеживание изменений NHibernate не переносит изменения в пользовательский тип (IUserType) - PullRequest
0 голосов
/ 20 мая 2010

У меня есть модель со свойством Dictionary<string, string>, которая хранится в базе данных с использованием JSON. Я использую пользовательский тип NHibernate для сопоставления словаря с JSON-кодированной строкой, что прекрасно работает.

Моя проблема в том, что когда я сбрасываю сеанс, и свойство only , которое изменилось, является этим словарем, то сущность не обновляется. Если любое другое свойство также изменилось, сущность (включая строку JSON) обновляется.

Другими словами, NHibernate правильно отображает словарь в JSON, используя мой пользовательский тип, но это пользовательское свойство НЕ используется для определения, изменилась ли сущность.

Предложения

1 Ответ

4 голосов
/ 20 мая 2010

Вам необходимо правильно переопределить Equals в своей реализации IUserType, чтобы он возвращал значение false при сравнении со своим начальным значением. NHibernate использует Equals, чтобы определить, есть ли в поле изменения, которые необходимо сохранить.

Причина, по которой оно обновляется при изменении другого свойства, заключается в том, что по умолчанию NHIbernate выдает обновления, включая все сопоставленные свойства.

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