Ошибка арифметического переполнения при сохранении достаточно малого числа с помощью 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 на схеме
  • Обязательно обновите схему!

Но я не смог учесть триггеры, которые может иметь таблица. Какой-то очень хороший разработчик решил, что всякий раз, когда производится обновление таблицы ДРУГОЙ таблицы со столбцами ОДНОГО ЖЕ, следует использовать ее в качестве посредника. Я удалил триггер (так как это было глупо), и это сработало.

Итак, вывод таков:

  • ПРОВЕРЬТЕ триггеры, которые могут быть брошены.
  • Не работайте с глупыми разработчиками.
Другие вопросы по тегам