Frameworks 十进制输出参数在EF5.0中舍入为整数

Frameworks 十进制输出参数在EF5.0中舍入为整数,frameworks,entity,Frameworks,Entity,我们正在使用现有的数据库存储过程,类似于下面返回十进制输出的数据库存储过程 CREATE PROCEDURE spTest(@a int, @b decimal(18,2) output) as BEGIN SELECT @b=23.22 SELECT * FROM <TABLE> where id = @a END 这与Imre Horvath()发布的问题完全相同,但区别在于我们使用的是sqlserver2008和entityframework5.0。在阅读了他的文

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

CREATE PROCEDURE spTest(@a int, @b decimal(18,2) output)
as
BEGIN
   SELECT @b=23.22
   SELECT * FROM <TABLE> where id = @a
END
这与Imre Horvath()发布的问题完全相同,但区别在于我们使用的是sqlserver2008和entityframework5.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)为输出参数的存储过程。我想知道这在EntityFramework5.0中是否仍然是一个问题。 非常感谢你的帮助


库马尔

不,这在EF 5.0中没有固定,在6.0中可能也不会固定

更新

我最近更新到EF 6.0,没有,问题仍然没有解决。我想EF6.0现在已经很流行了,所以如果你喜欢这类东西,你可以自己修补它。

在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);
}

我和你有同样的问题,在我引用本文之后,我已经解决了这个问题

解决此问题有三个步骤:

  • 右键单击edmx文件=>Open with…=>XML(文本)编辑器
  • 搜索文本
    ,然后将其替换为
  • 搜索文本
    ,然后将其替换为

  • 希望这对你有帮助

    这正是一个非常神秘问题的正确答案!谢谢你(6年后)。我无法理解为什么EDMX设计器不在“属性”窗口中显示精度和比例。。。
    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);
    }