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



在EF Core中运行Update-Database时出现此错误:

将数字转换为数据类型numeric时发生算术溢出错误
该语句已终止。

此SQL段也会突出显示。

执行DbCommand(10ms(失败[参数=[],命令类型="文本",命令超时="30"]

IF EXISTS(SELECT*FROM[sys].[identity_columns]WHERE[name]IN(N'DiverId',N'CreatedAt',N'DriverId','EmployeeNumber',N.name',N'SiteId',N'UpdatedAt'(AND[object_id]=object_id(N'[Drivers]'(
设置identity_INSERT[Drivers]ON
插入[Drivers]([DiverId],[CreatedAt],[DriverId],[EmployeNumber],[Name],[SiteId],[UpdatedAt],
(2,'2020-04-30T10:41:02.0000000',-498741256210000.0419079,N'DRIVER ABUBAKAR',9141790000000000000.0'2020-06-01T03:01:34.0000000'(;

如果存在(SELECT*FROM[sys].[identity_columns]WHERE[name]IN(N'DiverId',N'CreatedAt',N'DriverId',N'EmployeeNumber',N[name',N'SiteId','UpdatedAt'(AND[object_id]=object_id(N'[Drivers]'(
设置identity_INSERT[Drivers]OFF;

这是模型类Driver:

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
  • 您的种子数据可能不正确。例如,您正试图插入9193900000000000000.0作为DriverId。它不能容纳小数(18,10(。这是最大的十进制数(18,10(:99999999.9999999999(共18位,但小数点后的部分保留10位(

最新更新