映射存储过程时会发生这种情况,该存储过程从定义一个字段为“float”的表中提取数据
如果我忽略此问题,我最终会遇到以下错误:
'EOST_GetSome_Result'上的'FieldName'属性无法设置为'System.Double'值。您必须将此属性设置为类型为“System.Int32”的非空值。
映射字段:
public Nullable<int> FieldName { get; set; }
在数据库级别将float更改为int不是一个选项,那么如何在应用程序级别处理这种情况呢?
答案 0 :(得分:0)
我意识到这是五年后的事,但是昨天我还是碰到了这种情况,至少是这种错误消息。这是我发现的。
我有一个结合了其他两个视图结果的视图。映射到该视图的C#模型清楚地表明我的属性是整数,而我们将其称为“联合”视图,则表明该列类型在SSMS中为“ int”。但是,由于某种原因,将其合并的“左”视图和“右”视图都表示该列是浮点数。可能是因为对原始整数值进行了ISNULL操作...我不确定。
无论如何,两个子视图都有一列,出于某些未知原因,SQL决定将其视为浮点型。它们在第三个视图中组合在一起,这似乎理解我们期望一个整数。但是,在运行时,我认为结果是作为浮点数而不是整数返回给Entity Framework的,这使EF感到难过,因此抛出此错误。
解决方案:
我在两个子视图的每个视图中都添加了CAST(<stuff> AS INT)
,问题就消失了。