SqlException:违反******约束'******'。无法在对象“ ******”中插入重复键。重复键值为******

时间:2018-07-22 09:51:38

标签: entity-framework asp.net-core ef-core-2.1

当尝试使用EF将用户插入AspNetUsers表时,出现以下错误:

  

Microsoft.EntityFrameworkCore.DbUpdateException:'发生了错误   在更新条目时。有关详细信息,请参见内部异常。'

     

SqlException:违反******约束'******'。无法插入   对象“ ******”中的重复键。重复的键值为******。   该声明已终止。

该错误是逐字记录的(它实际上显示了星号)。在插入用户之前,我已明确删除它们,因此我不知道为什么会收到此错误。

删除用户的代码

            foreach (var user in globalUsers)
            {
                if (rdb.Users.Any(u => u.Email == user.Email))
                {
                    var existingUserInDb = rdb.Users.First(u => u.Email == user.Email);
                    rdb.Users.Remove(existingUserInDb);
                    await rdb.SaveChangesAsync();
                }
            }

添加新用户的代码

            foreach (var gu in globalUsers)
            {
                rdb.Users.Add(gu);
                await rdb.SaveChangesAsync();
            }

1 个答案:

答案 0 :(得分:1)

问题出在以下方面:

  • 添加用户时,我已经明确设置了用户ID
  • 我们正在使用软删除,因此删除现有用户实际上并没有删除
  • ASP.NET/EF没有读取软删除,因此我要插入另一个用户,该用户具有与软删除用户相同的用户ID

我通过在插入用户时创建新的用户ID解决了该问题。

        foreach (var gu in globalUsers)
        {
            gu.Id = Guid.NewGuid().ToString();
            rdb.Users.Add(gu);
            await rdb.SaveChangesAsync();
        }