【发布时间】:2017-03-05 17:35:52
【问题描述】:
这是一个使用 EF6 的 ASP.NET MVC 项目。需要调用采用表值参数的存储过程。 EntityFrameworkExtras用于方便通话。
存储过程返回一个包含多行和多列的结果集。其中一列是Decimal(8,2)。存储过程通过调用EF6的
context.ExecuteStoredProcedure<ClassMatchingResultset>
调用成功。返回一个List<ClassMatchingResultset>。除了所有行上为零的小数列外,其中的所有属性都已填写。
存储过程在 SSMS 中测试良好,并在使用相同参数调用时返回十进制值。
ClassMatchingResultset 使用 Decimal 数据类型作为小数属性。存储过程正在返回一个临时表上的 select 语句,其中包含同名的十进制列。
这里发生了什么?十进制属性的名称是TotalCost。 TotalCost 是不是根本没有设置好? EF 将TotalCost 设置为零是因为读取结果集的问题吗?
【问题讨论】:
-
你好,可以给我们看一下代码吗?
-
你会遇到这个问题吗? stackoverflow.com/questions/18166992/…
-
这似乎不是类型转换期间的舍入问题。我确实尝试过您将数字硬编码到proc的结果集中的建议。那行得通!如果我输入 21,EF 会将其读取为 int,并引发类型转换错误。如果我输入21.1,它就成功了。我尝试将 proc 中的实际结果转换为 varchar,即
cast(21.1 as varchar(10)) as TotalCost你能相信 EF 将其转换为“0.00”吗? -
多年前我创作了 Crystal Reports。解释某些 procs 的结果会有困难。我们发现它正在阅读整个过程来解释结果集。所以我尝试将结果插入一个新的 cte,然后是一个新的临时表,然后从中返回结果。没有骰子。是时候编写一个测试项目了。完成后我会分享代码。
标签: c# sql-server entity-framework entity-framework-6