首页 > 解决方案 > EF6 - 从十进制到 int32 的无效转换

问题描述

我有一些表,其字段定义如下......

...
[oneField] NUMERIC(2) NULL,
...

以及对应的c#实体模型...

...
public int? oneField { get; set; }
...

流畅的配置...

Property(r => r.oneField)
    .HasColumnName("oneField");

好吧,综上所述,从数据库中检索数据时出现以下异常。

System.InvalidOperationException: The specified cast from a materialized
  'System.Decimal' type to a nullable 'System.Int32' type is not valid.

有什么想法可以解决这个问题吗?我可以理解,如果 NUMERIC 字段有可能导致问题的小数部分,但只是 2 位的整数值,为什么不能转换为 INT32?

注意:我知道如果我将表中的字段更改为 INT 问题将得到解决,但我想保留 NUMERIC(2),因为它更好地代表要存储在那里的值(带 2 的数字位数)。

标签: c#entity-frameworkentity-framework-6

解决方案


如果您想使用,NUMERIC(2)那么您需要一个decimal模型属性,否则您将看到您报告的转换错误。因此,您的解决方案是更改数据库或更改模型。

但是,NUMERIC(2)这对于您的目的来说是多余的,并且会消耗 5 个字节,而您只需要最多 99 的数字。相反,您应该考虑使用TINYINT允许您存储从 0 到 255 的数字。这意味着存储只有一个字节,并且你的模型可能是byte匹配的。


推荐阅读