我们使用类似于下面的现有数据库存储过程返回十进制输出,
CREATE PROCEDURE spTest(@a int, @b decimal(18,2) output)
as
BEGIN
SELECT @b=23.22
SELECT * FROM <TABLE> where id = @a
END
Run Code Online (Sandbox Code Playgroud)
当我在C#app(下面的代码)中调用存储过程时,我得到输出参数的结果为23而不是23.22
ObjectParameter b = new ObjectParameter("b", typeof(System.Decimal))
var result = myentities.context.spTest(1234, b)
Run Code Online (Sandbox Code Playgroud)
这个问题完全由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"/>;
Run Code Online (Sandbox Code Playgroud)
我改成了
<Parameter Name="b" Type="decimal" Mode="InOut" Precision="18" Scale="2"/>;
Run Code Online (Sandbox Code Playgroud)
并运行应用程序,我得到了预期的结果(23.22)
这是一种解决方法,但不是解决方案,因为您知道当我们更新实体框架设计器中的存储过程时,更改将会丢失.在我们的数据库中,我们有许多存储过程,其中包含十进制(18,2)作为输出参数.我想知道这是否仍然是实体框架5.0中的一个问题.非常感谢您的帮助.
库马尔