LINQ to SQL从金钱到双倍的映射

时间:2020-03-05 18:40:44  来源:igfitidea点击:

我是第一次使用LINQ,想在SQL中具有money类型时使Mapping正常工作,但是我的域对象属性是double类型。如何在XML文件或者代码中表达这一点,以使映射不会引发通常的"无效类型转换"异常?

解决方案

回答

可以肯定,Money会映射到System.Decimal

在这里检查

回答

在DBML XML文件中,我们可以将Column元素的Expression属性设置为如下所示:

<Column Name="Table1.Amount" DbType="smallint" Type="System.Int32" 
         Expression="CAST(Table1.Amount as int)" />

回答

稍微偏离主题,但这是在SQLServer中使用Money类型时每个人都应该知道的事情。

我们不想使用双精度,而是想使用十进制。

Double是一个长浮点数,不应将浮点算术用于财务计算。

考虑一下,分数1 / 3、1 / 3和1/3等于1. 但是,当表示为双精度时,即:

.3333 + .3333 + .3333 = .9999不是1.

我们可能会认为失去千分之一的钱是微不足道的,但是当我们与他人合作时却并非如此。

使用System.Decimal。