Ошибка арифметического переполнения при запуске Update-База данных EFCore

#c# #.net-core #entity-framework-core #entity-framework-migrations #arithmetic-overflow

#c# #.net-ядро #сущность-фреймворк-ядро #entity-framework-миграции #арифметика-переполнение

Вопрос:

Я получаю эту ошибку при запуске Update-Database в EF Core:

Ошибка арифметического переполнения при преобразовании числового типа в числовой тип данных.
Оператор был завершен.

Этот сегмент SQL также выделен.

Не удалось выполнить DbCommand (10 мс) [Параметры =[], CommandType=’Text’, CommandTimeout=’30’]

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ * ИЗ [sys].[identity_columns] ГДЕ [name] В (N’Diverid’, N’createdAt’, N’DriverID’, N’employeeNumber’, N’Name’, N’SiteID’, N’updatedAt’) И [object_id] = OBJECT_ID(N'[Драйверы]’))
УСТАНОВИТЬ IDENTITY_INSERT [Драйверы];
ВСТАВИТЬ В [Драйверы] ([DiverId], [createdAt], [DriverID], [employeeNumber], [Name], [SiteID], [updatedAt])
ЗНАЧЕНИЯ (1, ‘2020-04-30T10:41:02.0000000′, -9193900000000000000.0, 119642, NWDE274YE ТОЧУКВУ’, -9141790000000000000.0, ‘2020-06-01T03:01:34.0000000’),
(2, ‘2020-04- 30T10:41:02.0000000’, -4987412556426210000.0, 419079, Водитель АБУБАКАР», -9141790000000000000.0, «2020-06-01T03:01:34.0000000»);

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ * ИЗ [sys].[identity_columns] ГДЕ [name] В (N’Diverid’, N’createdAt’, N’DriverID’, N’employeeNumber’, N’Name’, N’SiteID’, N’updatedAt’) И [object_id] = OBJECT_ID(N'[Драйверы]’))
ОТКЛЮЧАЮТ 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; }
}
  

Комментарии:

1. decimal(18,10) означает: общее количество цифр = 18, из этих 10 после запятой; смотрите здесь .. Итак, у вас осталось 8 цифр до десятичной точки, которую вы явно превышаете.

Ответ №1:

Похоже, вы заполняете свою базу данных некоторыми данными. Возможные проблемы:

  • Возможно, у DriverID и SiteID указаны неправильные типы данных. Вы установили для него десятичное число (18,10). Это означает, что у вас есть только 8 цифр, доступных в левой части десятичной запятой. Десятичное число вообще кажется странным для поля Id. Обычно это int или bigint .
  • Ваши начальные данные могут быть неверными. Например, вы пытаетесь вставить -9193900000000000000.0 в качестве идентификатора драйвера. Он не может поместиться в десятичной системе счисления (18,10). Это самое большое десятичное (18,10) число: 99999999,9999999999 (всего 18 цифр, но 10 цифр зарезервированы для части после запятой).