C# 运行更新数据库EFCore时出现算术溢出错误

C# 运行更新数据库EFCore时出现算术溢出错误,c#,.net-core,entity-framework-core,entity-framework-migrations,arithmetic-overflow,C#,.net Core,Entity Framework Core,Entity Framework Migrations,Arithmetic Overflow,在EF Core中运行更新数据库时出现此错误: 将数字转换为数据类型numeric时出现算术溢出错误。 声明已终止 此SQL段也会突出显示 执行DbCommand失败(10ms)[参数=[],命令类型='Text',命令超时='30'] 如果存在(从[sys].[identity\u columns]中选择*,其中[name]位于(N'DiverId',N'CreatedAt',N'DriverId',N'EmployeeNumber',N'name',N'SiteId',N'UpdatedAt

在EF Core中运行
更新数据库时出现此错误:

将数字转换为数据类型numeric时出现算术溢出错误。
声明已终止

此SQL段也会突出显示

执行DbCommand失败(10ms)[参数=[],命令类型='Text',命令超时='30']

如果存在(从[sys].[identity\u columns]中选择*,其中[name]位于(N'DiverId',N'CreatedAt',N'DriverId',N'EmployeeNumber',N'name',N'SiteId',N'UpdatedAt')和[object\u id]=object\u id(N'[Drivers]')
将IDENTITY_INSERT[驱动程序]设置为ON
插入到[Drivers]([DiverId]、[CreatedAt]、[DriverId]、[EmployeeNumber]、[Name]、[SiteId]、[UpdatedAt])
值(1,'2020-04-30T10:41:02.0000000',-91939000000000.0119642,N'WDE274YE TOCHUKWU',-9141790000000.0,'2020-06-01T03:01:34.0000000'),
(2,'2020-04-30T10:41:02.0000000',-4987412556426210000.0,419079,N'DRIVER ABUBAKAR',-9141790000000.0,'2020-06-01T03:01:34.0000000')

如果存在(从[sys].[identity\u columns]中选择*,其中[name]位于(N'DiverId',N'CreatedAt',N'DriverId',N'EmployeeNumber',N'name',N'SiteId',N'UpdatedAt')和[object\u id]=object\u id(N'[Drivers]')
将标识插入[驱动程序]设置为关闭状态

这是模型类
驱动程序

public class Driver 
{
        public int Id { get; set; }
        public DateTime CreatedAt { get; set; }
        public DateTime UpdatedAt { get; set; }
        [Column(TypeName = "decimal(18,10)")]
        public decimal SiteId { get; set; }
        [Column(TypeName = "decimal(18,10)")]
        public decimal DriverId { get; set; }
        public string Name { get; set; }
        public int EmployeeNumber { get; set; }
}

看起来您正在为数据库添加一些数据。可能的问题:

  • DriverId和SiteId可能指定了不正确的数据类型。您已将其设置为十进制(18,10)。这意味着小数点左侧只有8位可用数字。对于Id字段来说,十进制通常看起来很奇怪。通常是int或bigint
  • 您的种子数据可能不正确。例如,您试图将-919390000000000000.0插入为DriverId。它不能用十进制(18,10)表示。这是最大的十进制数(18,10):9999999.9999999999(总共18位,但小数点后的部分保留10位)
十进制(18,10)
表示:小数点后10位中的总位数=18位;看见因此,在小数点前还有8位,显然超过了。