繁体   English   中英

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

[英]Arithmetic Overflow Error When running Update-Database EFCore

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

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

此 SQL 段也突出显示。

执行 DbCommand 失败 (10ms) [Parameters=[], CommandType='Text', CommandTimeout='30']

IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'DiverId', N'CreatedAt', N'DriverId', N'EmployeeNumber', N'Name', N'SiteId', N 'UpdatedAt') AND [object_id] = OBJECT_ID(N'[Drivers]'))
SET IDENTITY_INSERT [驱动程序] ON;
INSERT INTO [Drivers] ([DiverId], [CreatedAt], [DriverId], [EmployeeNumber], [Name], [SiteId], [UpdatedAt])
值 (1, '2020-04-30T10:41:02.0000000', -9193900000000000000.0, 119642, N'WDE274YE TOCHUKWU', -914179000000003:0000000040000000004
(2, '2020-04-30T10:41:02.0000000', -4987412556426210000.0, 419079, N'DRIVER ABUBAKAR', -91417900000000000020.01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000次

IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'DiverId', N'CreatedAt', N'DriverId', N'EmployeeNumber', N'Name', N'SiteId', N 'UpdatedAt') AND [object_id] = OBJECT_ID(N'[Drivers]'))
SET IDENTITY_INSERT [驱动程序] 关闭;

这是模型类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位)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM