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);
}
我和你有同样的问题,在我引用本文之后,我已经解决了这个问题 解决此问题有三个步骤:
,然后将其替换为
,然后将其替换为
希望这对你有帮助 这正是一个非常神秘问题的正确答案!谢谢你(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);
}