Ошибка арифметического переполнения при сохранении достаточно малого числа с помощью linq
Когда я пытаюсь сохранить номер 5906560069339
используя linq в bigint
столбец sql (Int64
linq) я получаю следующую ошибку:
Ошибка арифметического переполнения при преобразовании выражения в тип данных int. Заявление было прекращено.
В частности:
var p = db.Table.Where(x => x.ID == id).FirstOrDefault();
p.Phone = 5906560069339;
db.SaveChanges();
Стол Table
имеет столбец Phone
как bigint и все в курсе. Как я читал здесь, это число не так велико, поэтому это не должно быть проблемой. В чем дело?
Редактировать: я знаю, что обычные телефоны лучше рассматривать как строки (varchar
) но я не работаю с обычными телефонными номерами (как вы можете видеть по номеру), и в любом случае я хотел бы знать, почему это не работает.
1 ответ
Нашел это.
Все, что я сказал, правильно:
- Есть
Bigint
в столбце SQL. - Обязательно иметь
Int64
-Long
на схеме - Обязательно обновите схему!
Но я не смог учесть триггеры, которые может иметь таблица. Какой-то очень хороший разработчик решил, что всякий раз, когда производится обновление таблицы ДРУГОЙ таблицы со столбцами ОДНОГО ЖЕ, следует использовать ее в качестве посредника. Я удалил триггер (так как это было глупо), и это сработало.
Итак, вывод таков:
- ПРОВЕРЬТЕ триггеры, которые могут быть брошены.
- Не работайте с глупыми разработчиками.