gpt4 book ai didi

frameworks - 十进制输出参数在EF5.0中四舍五入为整数

转载 作者:行者123 更新时间:2023-12-04 10:18:51 27 4
gpt4 key购买 nike

我们正在使用现有的数据库存储过程,该过程类似于下面的返回十进制输出的过程,

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和 Entity Framework 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)

这是一种解决方法,但不是解决方案,因为您知道当我们在 Entity Framework 设计器中更新存储过程时,更改将丢失。在我们的数据库中,我们有很多存储过程以十进制(18,2)作为输出参数。我想知道这在 Entity Framework 5.0中是否仍然是一个问题。
您的帮助将不胜感激。

库玛

最佳答案

我遇到了同样的问题,从本文http://tiku.io/questions/1120572/decimal-output-parameter-rounded-to-integer-in-ef5-0引用后,我已经解决了它

有3个步骤来解决此问题:

  • 右键单击edmx文件=>使用...打开... => XML(文本)编辑器。
  • 搜索文本<Parameter Name="b" Type="numeric" Mode="InOut" />,然后将其替换为<Parameter Name="b" Type="numeric" Mode="InOut" Precision="20" Scale="2" />
  • 搜索文本<Parameter Name="b" Mode="InOut" Type="Decimal" />,然后将其替换为<Parameter Name="b" Mode="InOut" Type="Decimal" Precision="20" Scale="2" />

  • 希望能帮到你!

    关于frameworks - 十进制输出参数在EF5.0中四舍五入为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18166992/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com