C# 使用linq保存足够小的数字时出现算术溢出错误
当我试图在C# 使用linq保存足够小的数字时出现算术溢出错误,c#,entity-framework,linq-to-entities,bigint,C#,Entity Framework,Linq To Entities,Bigint,当我试图在bigintsql列(Int64linq)中使用linq保存数字59065609339时,我得到以下错误: 将表达式转换为数据类型int时出现算术溢出错误。该语句已终止 具体而言: var p = db.Table.Where(x => x.ID == id).FirstOrDefault(); p.Phone = 5906560069339; db.SaveChanges(); 表table将列Phone作为一个bigint,并且所有内容都是最新的。正如我所读到的,这个数字并
bigint
sql列(Int64
linq)中使用linq保存数字59065609339
时,我得到以下错误:
将表达式转换为数据类型int时出现算术溢出错误。该语句已终止
具体而言:
var p = db.Table.Where(x => x.ID == id).FirstOrDefault();
p.Phone = 5906560069339;
db.SaveChanges();
表table
将列Phone
作为一个bigint,并且所有内容都是最新的。正如我所读到的,这个数字并没有那么大,所以这应该不是一个问题。怎么了
编辑:我知道最好将普通电话视为字符串(varchar
),但我不使用普通电话号码(正如您可以看到的那样),我想知道为什么这不起作用。找到了它
我所说的一切都是正确的:
- 在SQL列上有一个
Bigint
- 确保架构上有一个
-Int64
Long
- 一定要更新架构李>
- 检查可能引发的触发器
- 不要与愚蠢的开发人员合作
- 在SQL列上有一个
Bigint
- 确保架构上有一个
-Int64
Long
- 一定要更新架构李>
- 检查可能引发的触发器
- 不要与愚蠢的开发人员合作
- 找到了
我所说的一切都是正确的:
+
开头,表示国际前缀。。。这是怎么回事?数据库中是否有任何计算列或触发器可能正在进行溢出计算?SQL中的BigInt表示,linqI中的Int64假设您在表类中将Phone作为int类型属性。通常,电话号码应存储为字符串。将电话号码存储在数字字段中是一个非常糟糕的主意。在欧洲,区号通常以零开头。对于数字字段,您刚刚丢失了(非常重要的)前导零。国际代码通常以+
开头,表示国际前缀。。。这是怎么回事?数据库中是否有任何计算列或触发器可能正在执行溢出的计算?IMO triggers==bad,每次。IMO triggers==bad,每次。