使用带有输出参数的 LINQ 和存储过程丢失小数精度和比例

Posted

技术标签:

【中文标题】使用带有输出参数的 LINQ 和存储过程丢失小数精度和比例【英文标题】:Lost decimal precision and scale using LINQ and stored procedure with output parameters 【发布时间】:2009-01-06 19:45:46 【问题描述】:

我有一个使用如下输出参数的存储过程:

ALTER PROCEDURE [GetAmount] 
( 
@orderID [int], 
@totalcost decimal(18,2) OUTPUT 
) 
SELECT @totalcost = cost 
FROM mytable 
WHERE orderID = @orderID 

当我将存储过程拖到设计器上时,designer.cs 文件中生成的代码最终会丢失精度和比例,如下所示:

[Parameter(DbType="Decimal")] ref System.Nullable<decimal> totalcost 

这是一个问题,因为产品价格和订单总数等数据正在四舍五入(即 19.95 变为 20)。

现在,我可以手动更正 .cs 文件,但我必须记住每次进行更新时都要这样做。难道我做错了什么?有没有办法改变我的存储过程,使 LINQ 能够自动检测精度和规模?

【问题讨论】:

【参考方案1】:

我可以手动更正 .cs 文件,但是

对,您需要将此代码移动到一个部分类文件中,在那里编辑映射的精度,然后从设计器中删除存储过程。

这为您提供了映射到存储过程的代码的手动规范。

【讨论】:

【参考方案2】:

你可以使用money类型而不是decial(18,2)类型吗?

【讨论】:

我真的不知道为什么十进制不能正常工作。我应该多玩一些。对不起。

以上是关于使用带有输出参数的 LINQ 和存储过程丢失小数精度和比例的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 和 Cx_Oracle 调用带有 XMLTYPE 输入和输出参数的 Oracle 存储过程

带有输出变量的存储过程示例

如何在带有 Select 语句的存储过程上使用 LINQ?

存储过程中为啥会丢失小数点前面的0

mybatis调用存储过程 无参带有输入输出参数,输出游标类型的 存储

如何在带有 LINQ to SQL 的存储过程中使用临时表