#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 цифр зарезервированы для части после запятой).