我们正在使用类似于下面返回十进制输出的现有数据库存储过程,
CREATE PROCEDURE spTest(@a int, @b decimal(18,2) output)
as
BEGIN
SELECT @b=23.22
SELECT * FROM <TABLE> where id = @a
END
当我在 C# 应用程序(下面的代码)中调用存储过程时,我得到输出参数的结果为 23 而不是 23.22
ObjectParameter b = new ObjectParameter("b", typeof(System.Decimal))
var result = myentities.context.spTest(1234, b)
这与 Imre Horvath 发布的问题完全相同(http://social.msdn.microsoft.com/Forums/en-US/14bdde82-c084-44dd-ad83-c1305cb966d2/decimal-output-parameter-rounded-to-integer)但不同的是我们使用的是 SQL Server 2008 和实体框架 5.0。从他的帖子中阅读了建议后,我在 xml 编辑器中打开了 edmx 文件,并注意到输出参数 @b 如下所示,
<Parameter Name="b" Type="decimal" Mode="InOut"/>;
我把它改成
<Parameter Name="b" Type="decimal" Mode="InOut" Precision="18" Scale="2"/>;
并运行应用程序,我得到了预期的结果(23.22)
这是一种变通方法,但不是解决方案,因为您知道当我们在实体框架设计器中更新存储过程时,更改将会丢失。在我们的数据库中,我们有很多以十进制(18,2)作为输出参数的存储过程。我想知道这在实体框架 5.0 中是否仍然是一个问题。您的帮助将不胜感激。
库马尔