由于计算属性的小数精度,幻像更新

时间:2010-03-30 14:09:53

标签: nhibernate fluent-nhibernate

This article描述了我的问题。我有几个计算的属性。它们在SQL Server中键入十进制(9,2),在C#类中键入十进制。问题的一个例子是:

  1. 对象加载的属性值为14.9
  2. 执行计算,属性值更改为14.90393
  3. 当刷新会话时,NHibernate会发布更新,因为属性很脏
  4. 由于数据库字段为十进制(9,2),因此存储的值不会更改
  5. 每次加载此对象时,都会发出幻像更新。我不想截断我的业务对象中的计算,因为它将它们紧密地耦合到数据库,我不想在其他计算中失去精度。我尝试在映射文件中设置比例和精度或CustomType(“Decimal(9,2)”),但这似乎只影响模式生成。

    我唯一合理的选择似乎是创建一个IUserType实现来处理这个问题。有更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

映射到舍入的属性

答案 1 :(得分:0)

在我看来,这更像是一个域问题,而不是NHibernate问题。

您应该将您的十进制字段复制到DTO对象以执行所有计算,然后将其与原始NH域实体一起传回模型/存储库方法。此时,您可以应用舍入来满足您的精度等级,然后将舍入数字与原始NH实体进行比较,并根据需要进行更新和保存。