更新数据库时违反主键约束

时间:2014-11-09 14:06:12

标签: c# linq linq-to-sql

我尝试使用Linq-to-SQL使用以下代码更新数据库:

    public Air_Score Update(Air_Score myApp)
    {
        Air_Score c = null;

        if (myApp != null)
        {
            c = e.Air_Score.FirstOrDefault(a => a.ID == myApp.ID);

            if (c != null)
            {
                c.Score = myApp.Score;
            }

            e.SaveChanges();
        }

        return c;
    }

当我调用此函数时,我得到此异常

  

违反PRIMARY KEY约束' PK_Air_Score'。无法在对象' dbo.Air_Score'中插入重复键。重复键值为(222)。

代码中的错误是什么?

2 个答案:

答案 0 :(得分:0)

答案在您的错误消息中。在更新数据时,您的表主键正在重复,它是222.检查您的表并维护您的功能以避免在主键字段中使用相同的值。 PRIMARY KEY必须是唯一的。

答案 1 :(得分:0)

我认为问题在于您正在创建新的Air_Score并复制现有的Air_Score并尝试保存上下文。因此,实体框架将其视为插入而非更新。尝试删除Air Score变量的初始声明,如下所示

  public Air_Score Update(Air_Score myApp)
    {

        if (myApp != null)
        {
            var c = e.Air_Score.FirstOrDefault(a => a.ID == myApp.ID);
            if (c != null)
            {
                c.Score = myApp.Score;

            }
            e.SaveChanges();
        }
        return c;
    }