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

Arithmetic overflow error saving small enough number with linq

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

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 Table 将列 Phone 作为 bigint,所有内容都是最新的。正如我所读 here,这个数字并不大,所以应该不是问题。怎么了?

编辑:我知道最好将常规 phone 视为字符串 (varchar),但我不使用普通 [=31] =] 数字(正如您在数字中看到的那样),无论哪种方式,我都想知道 为什么 这不起作用。

找到了。

我说的都是对的:

  • 在 SQL 列有一个 Bigint
  • 一定要在架构上有 Int64 - Long
  • 一定要更新架构!

但我没有考虑到 table 可能具有的触发器。一些 超级好 开发人员决定,每当对 table 另一个进行更新时 table 和 相同的 列将用作中介。我删除了触发器(因为它 愚蠢 )并且它起作用了。

所以结论是:

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