首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >EF6 -从十进制到int32的转换无效

EF6 -从十进制到int32的转换无效
EN

Stack Overflow用户
提问于 2018-05-31 17:12:12
回答 2查看 1.4K关注 0票数 1

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

代码语言:javascript
复制
...
[oneField] NUMERIC(2) NULL,
...

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

代码语言:javascript
复制
...
public int? oneField { get; set; }
...

流畅的配置...

代码语言:javascript
复制
Property(r => r.oneField)
    .HasColumnName("oneField");

好吧,有了上面的所有这些,我在从DB检索数据时得到了以下异常。

代码语言:javascript
复制
System.InvalidOperationException: The specified cast from a materialized
  'System.Decimal' type to a nullable 'System.Int32' type is not valid.

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 17:30:21

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

然而,对于您的目的来说,NUMERIC(2)过于夸张了,它将占用5个字节,而您只需要最多99个字节的数字。相反,您应该考虑使用TINYINT,它将允许您存储从0到255的数字。这意味着存储空间只有一个字节,你的模型可以通过byte来匹配。

票数 4
EN

Stack Overflow用户

发布于 2018-05-31 17:19:21

据我所知,它告诉您该列被物化为一个System.Decimal对象,而您正试图将其强制转换为一个不受支持的System.Int32对象。尝试使用INTEGER来定义数据库列

或者使用System.Decimal来定义您的EF对象

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50620655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档