Фантомные обновления благодаря десятичной точности вычисляемых свойств - PullRequest
4 голосов
/ 30 марта 2010

Эта статья описывает мою проблему. У меня есть несколько свойств, которые рассчитываются. Они напечатаны как десятичные (9,2) в SQL Server и десятичные в моих классах C #. Пример проблемы:

  1. Объект загружен со значением свойства 14,9
  2. Выполнен расчет, и значение свойства изменено на 14,90393
  3. Когда сеанс сбрасывается, NHibernate выдает обновление, потому что свойство грязное
  4. Поскольку поле базы данных является десятичным (9,2), сохраненное значение не изменяется

Обычно фантомное обновление выдается при каждой загрузке этого объекта. Я не хочу урезать вычисления в моих бизнес-объектах, потому что это тесно связывает их с базой данных, и я не хочу терять точность в других вычислениях. Я попытался установить масштаб и точность или CustomType ("Decimal (9,2)") в файле сопоставления, но, похоже, это влияет только на генерацию схемы.

Единственным разумным вариантом, по-видимому, является создание реализации IUserType для этого. Есть ли лучшее решение?

Ответы [ 2 ]

1 голос
/ 31 марта 2010

Вместо этого отобразите округленное свойство

0 голосов
/ 30 июня 2010

Мне кажется, это скорее проблема домена, чем проблема NHibernate.

Вам следует скопировать десятичное поле (поля) в объект DTO, чтобы выполнить все ваши вычисления, а затем вернуться обратно в метод модели / хранилища вместе с исходной сущностью домена NH. На этом этапе вы можете применить округление, чтобы соответствовать вашей шкале точности, а затем сравнить округленное число с исходным объектом NH, а затем обновить и сохранить при необходимости.

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