c# - 使用 Entity Framework Core 将 Numeric(9,0) 映射到 int 的最佳方式
问题描述
在我们的 sql server 数据库中,我们有 Numeric(9,0) 类型的列。当我从数据库创建模型时,这些列在 c# 中被赋予十进制类型。但是我不明白为什么我们不能在这里使用 int 。int 应该能够保存 numeric(9,0) 中的所有数字。
如果我只是在这样的模型中使用 int 尝试它:
public Model
{
public int Id {get; set;}
}
我将收到此错误:System.InvalidCastException:'无法将'System.Decimal'类型的对象转换为'System.Int32'类型。
我发现解决这个问题的方法是“告诉”EF OnModelCreating 中的列类型,如下所示:
modelBuilder.Entity<Model>(entity =>
{
entity.Property(e => e.Id).HasColumnType("numeric(9, 0)");
});
这似乎使它工作正常。
这样做的原因是什么,这是正确的做法吗?
解决方案
一个 int 的有效数字略少于 7 个(+/- 22 亿)。你的小数有 9 位有效数字。
推荐阅读
- elasticsearch - 哪个 ELK(Elastic search,logstash,Kibana) 堆栈版本与 java 7 兼容
- c# - 内存在哪里分配给静态、常量和只读字段?
- python - rest-auth 中密码更改序列化程序中的更改错误
- mongodb - MongoDB 使用 Java,如何过滤同一文档的 2 个字段
- html - CSS 在 HTML 文件中未按预期工作
- java - Rr-从指定步骤运行一个进程
- excel - VBA自动过滤器从一张纸到另一张
- html - 嵌入式 span 元素中的 FlexBox 对齐问题
- python - 在 python np.diff() 中意味着 out[n] = a[n+1] - a[n] 但我想要 out[n]=a[n]-a[n-1]?
- python - 使用 pandas 对同一列中的数值差异求和