Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq保存足够小的数字时出现算术溢出错误_C#_Entity Framework_Linq To Entities_Bigint - Fatal编程技术网

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
  • 一定要更新架构
但是我没有解释表中可能存在的触发器。一些super-nice开发人员决定,每当对表进行更新时,另一个表将相同的列用作中介。我删除了扳机(因为它很愚蠢),它成功了

因此,结论是:

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

      我所说的一切都是正确的:

      • 在SQL列上有一个
        Bigint
      • 确保架构上有一个
        Int64
        -
        Long
      • 一定要更新架构
      但是我没有解释表中可能存在的触发器。一些super-nice开发人员决定,每当对表进行更新时,另一个表将相同的列用作中介。我删除了扳机(因为它很愚蠢),它成功了

      因此,结论是:

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

      SQL上的BigInt表示,linqI上的Int64假设您将Phone作为Table类中的int类型属性。通常,电话号码应存储为字符串。将电话号码存储在数字字段中是一个非常糟糕的主意。在欧洲,区号通常以零开头。对于数字字段,您刚刚丢失了(非常重要的)前导零。国际代码通常以
      +
      开头,表示国际前缀。。。这是怎么回事?数据库中是否有任何计算列或触发器可能正在进行溢出计算?SQL中的BigInt表示,linqI中的Int64假设您在表类中将Phone作为int类型属性。通常,电话号码应存储为字符串。将电话号码存储在数字字段中是一个非常糟糕的主意。在欧洲,区号通常以零开头。对于数字字段,您刚刚丢失了(非常重要的)前导零。国际代码通常以
      +
      开头,表示国际前缀。。。这是怎么回事?数据库中是否有任何计算列或触发器可能正在执行溢出的计算?IMO triggers==bad,每次。IMO triggers==bad,每次。