Ошибка арифметического переполнения при запуске Update-Database EFCore
Я получаю эту ошибку во время работы
Update-Database
в EF Core:
Ошибка арифметического переполнения при преобразовании числового типа данных в числовой.
Заявление было прекращено.
Этот сегмент SQL также выделен.
Не удалось выполнить DbCommand (10 мс) [Parameters=[], CommandType='Text', CommandTimeout='30']
ЕСЛИ СУЩЕСТВУЕТ (SELECT * FROM [sys].[Identity_columns] ГДЕ [имя] IN (N'DiverId', N'CreatedAt', N'DriverId', N'EmployeeNumber', N'Name', N'SiteId', N'UpdatedAt') И [object_id] = OBJECT_ID(N'[Драйверы]'))
SET IDENTITY_INSERT [Драйверы] ВКЛ;
INSERT INTO [Drivers] ([DiverId], [CreatedAt], [DriverId], [EmployeeNumber], [Name], [SiteId], [UpdatedAt])
ЗНАЧЕНИЯ (1, '2020-04-30T10:41:02.0000000', -9193900000000000000.0, 119642, N'WDE274YE TOCHUKWU', -9141790000000000000.0,' 2020-06-01T03:01:34.0000000'),
(2,' 2020-04-30T10:41:02.0000000', -4987412556426210000.0, 419079, NDRIVER АБУБАКАР ', -9141790000000000000.0, '2020-06-01T03:01:34.0000000');ЕСЛИ СУЩЕСТВУЕТ (SELECT * FROM [sys].[Identity_columns] ГДЕ [имя] IN (N'DiverId', N'CreatedAt', N'DriverId', N'EmployeeNumber', N'Name', N'SiteId', N'UpdatedAt') И [object_id] = OBJECT_ID(N'[Драйверы]'))
SET 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; }
}
1 ответ
Похоже, вы заполняете свою базу данных некоторыми данными. Возможные проблемы:
- DriverId и SiteId могут иметь неправильные типы данных. Вы установили десятичное число (18,10). Это означает, что у вас есть только 8 цифр слева от десятичной точки. Десятичная дробь вообще кажется странной для поля Id. Обычно это int или bigint.
- Ваши исходные данные могут быть неверными. Например, вы пытаетесь вставить -9193900000000000000.0 как DriverId. Он не может поместиться в десятичную дробь (18,10). Это наибольшее десятичное число (18,10): 99999999.9999999999 (всего 18 цифр, но 10 цифр зарезервированы для части после десятичной точки).