2016-05-11 3 views
1

Когда я пытаюсь сохранить с помощью LINQ номер 5906560069339 в bigint SQL колонке (Int64 LINQ), я получаю следующее сообщение об ошибке:Ошибка арифметического переполнения сохранение достаточно небольшого числа с помощью LINQ

Arithmetic overflow error converting expression to data type int. The statement has been terminated.

В частности:

var p = db.Table.Where(x => x.ID == id).FirstOrDefault(); 
p.Phone = 5906560069339; 
db.SaveChanges(); 

В таблице Table есть столбец Phone как bigint, и все в актуальном состоянии. Поскольку я читал here, это число не так уж и велико, поэтому это не должно быть проблемой. Что не так?

Edit: Я знаю это лучше лечить обычные телефоны как строки (varchar), но я не работаю с общими телефонными номерами (как вы можете видеть, с номером) и в любом случае я хотел бы знать, почему это не работает.

+0

BigInt on SQL, он говорит Int64 на linq –

+1

Предполагаю, что вы использовали Phone как свойство типа int в классе Table. –

+6

Обычно номера телефонов должны храниться как строки. – petelids

ответ

0

Найдено.

Все, что я сказал правильно:

  • Есть Bigint на колонке SQL.
  • Обязательно наличие Int64 - Long по схеме
  • Убедитесь, что схема обновлена!

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

Поэтому вывод:

  • ПРОВЕРКИ для триггеров, которые могут быть выброшены.
  • НЕ РАБОТАЕТ С глупыми разработчиками.
+1

IMO триггеры == плохо, каждый раз. – spender