EntityFramework Maps Float to Int

时间:2015-08-21 20:56:57

标签: c# entity-framework

映射存储过程时会发生这种情况,该存储过程从定义一个字段为“float”的表中提取数据

如果我忽略此问题,我最终会遇到以下错误:

  

'EOST_GetSome_Result'上的'FieldName'属性无法设置为'System.Double'值。您必须将此属性设置为类型为“System.Int32”的非空值。

映射字段:

   public Nullable<int> FieldName { get; set; }

在数据库级别将float更改为int不是一个选项,那么如何在应用程序级别处理这种情况呢?

1 个答案:

答案 0 :(得分:0)

我意识到这是五年后的事,但是昨天我还是碰到了这种情况,至少是这种错误消息。这是我发现的。

我有一个结合了其他两个视图结果的视图。映射到该视图的C#模型清楚地表明我的属性是整数,而我们将其称为“联合”视图,则表明该列类型在SSMS中为“ int”。但是,由于某种原因,将其合并的“左”视图和“右”视图都表示该列是浮点数。可能是因为对原始整数值进行了ISNULL操作...我不确定。

无论如何,两个子视图都有一列,出于某些未知原因,SQL决定将其视为浮点型。它们在第三个视图中组合在一起,这似乎理解我们期望一个整数。但是,在运行时,我认为结果是作为浮点数而不是整数返回给Entity Framework的,这使EF感到难过,因此抛出此错误。

解决方案: 我在两个子视图的每个视图中都添加了CAST(<stuff> AS INT),问题就消失了。