c# - 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 的数字位数)。
解决方案
如果您想使用,NUMERIC(2)
那么您需要一个decimal
模型属性,否则您将看到您报告的转换错误。因此,您的解决方案是更改数据库或更改模型。
但是,NUMERIC(2)
这对于您的目的来说是多余的,并且会消耗 5 个字节,而您只需要最多 99 的数字。相反,您应该考虑使用TINYINT
允许您存储从 0 到 255 的数字。这意味着存储只有一个字节,并且你的模型可能是byte
匹配的。
推荐阅读
- swiftui - SwiftUI 的 List/ForEach 视图中是否可以有一个 Button(action: -)
- python - Streamlit 中的登录页面问题
- java - 从键盘读取并忽略打印的文本
- javascript - 如何使用 Javascript 监听值变化的特定键?
- javascript - 通过计算字符长度将 JS 数组拆分和连接成块
- javascript - 广告未呈现
- json - Jq 在使用 AWS Secrets Manager 解析时添加额外的双引号
- c# - ServiceStack.Redis:所有 MQ 请求处理程序的一个线程池?
- python - 列表理解以删除不需要的对象。验证它按预期工作
- php - 从肥皂响应中提取价值