LINQ to SQL 从 Money 到 Double 的映射
-
08-06-2019 - |
题
我是第一次使用 LINQ,并且希望当 SQL 中有资金类型时映射能够工作,但我的域对象属性是 double 类型。如何在 XML 文件或代码中表达这一点,以便映射不会引发通常的“无效转换”异常?
解决方案
在 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。
您可能认为损失千分之一美分是微不足道的,但当您用别人的钱工作时,情况就不同了。
使用系统十进制。
非常确定 Money 映射到 System.Decimal
不隶属于 StackOverflow