【问题标题】:Decimal output parameter rounded to integer in EF5.0EF5.0 中的十进制输出参数四舍五入为整数
【发布时间】:2015-01-25 01:29:19
【问题描述】:

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

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 中是否仍然是一个问题。 非常感谢您的帮助。

库马尔

【问题讨论】:

    标签: frameworks entity


    【解决方案1】:

    我和你有同样的问题,在我参考这篇文章http://tiku.io/questions/1120572/decimal-output-parameter-rounded-to-integer-in-ef5-0后我已经解决了这个问题@

    有 3 个步骤可以解决此问题:

    1. 右键单击 edmx 文件 => 打开方式... => XML(文本)编辑器。
    2. 搜索文本&lt;Parameter Name="b" Type="numeric" Mode="InOut" /&gt;,然后将其替换为&lt;Parameter Name="b" Type="numeric" Mode="InOut" Precision="20" Scale="2" /&gt;
    3. 搜索文本&lt;Parameter Name="b" Mode="InOut" Type="Decimal" /&gt;,然后将其替换为&lt;Parameter Name="b" Mode="InOut" Type="Decimal" Precision="20" Scale="2" /&gt;

    希望对您有所帮助!

    【讨论】:

    • 一个非常神秘的问题的正确答案!谢谢(6年后)。为什么 EDMX 设计器没有在“属性”窗口中显示精度和比例,这超出了我的理解……
    【解决方案2】:

    在 EF6 中,我遇到了同样的问题! 但是找到一个简单的解决方案。 我尝试设置输出 ObjectParameter 值, 然后返回带刻度的小数,如 5602.86

    public decimal GetQuotationAmount(string rec_id, decimal price)
    {
        ObjectParameter qTA_AMT = new ObjectParameter("QTA_AMT", typeof(decimal));
        qTA_AMT.Value = 100000.00m;
        db.GRP_Calc_QuotationAmount(rec_id, price,qTA_AMT);
        return Convert.ToDecimal(qTA_AMT.Value);
    }
    

    【讨论】:

      【解决方案3】:

      不,这在 EF 5.0 中没有修复它可能也不会在 6.0 中修复。

      更新
      我最近更新到 EF 6.0,不,问题仍然没有解决。我猜 EF 6.0 现在是 Open Source,所以如果你喜欢这种东西,你总是可以自己修补它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 2019-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多