首页 > 解决方案 > 使用 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)");
            });

这似乎使它工作正常。

这样做的原因是什么,这是正确的做法吗?

标签: c#.netsql-serverentity-framework-core

解决方案


一个 int 的有效数字略少于 7 个(+/- 22 亿)。你的小数有 9 位有效数字。


推荐阅读