使用 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 和 相同的 列将用作中介。我删除了触发器(因为它 愚蠢 )并且它起作用了。
所以结论是:
- 检查可能引发的触发器。
- 不要与愚蠢的 开发人员一起工作。
当我尝试在 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 和 相同的 列将用作中介。我删除了触发器(因为它 愚蠢 )并且它起作用了。
所以结论是:
- 检查可能引发的触发器。
- 不要与愚蠢的 开发人员一起工作。