算术溢出错误使用linq保存足够小的数字

时间:2016-05-11 12:29:05

标签: c# entity-framework linq-to-entities bigint

当我尝试在5906560069339 sql列(bigint linq)中使用linq保存数字Int64时,出现以下错误:

  

将表达式转换为数据类型int的算术溢出错误。声明已经终止。

具体做法是:

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

Table将列Phone作为bigint,一切都是最新的。正如我读过here这个数字并不是那么大,所以它不应该是一个问题。怎么了?

编辑:我知道最好将常规手机视为字符串(varchar),但我不使用普通电话号码(如您所见)我想知道为什么这不起作用。

1 个答案:

答案 0 :(得分:0)

找到它。

我说的一切都是正确的:

  • 在SQL列上有Bigint
  • 确保在架构
  • 上有Int64 - Long
  • 确保更新架构!

但我没有说明该表可能具有的触发器。一些 超级好 开发人员决定每当使用 <对表 另一个 表进行更新时em>相同的 列可以用作中介。我删除了触发器(因为它是愚蠢)并且它有效。

所以结论是:

  • 检查可能引发的触发器。
  • 不要与愚蠢的开发人员合作。