【问题标题】:Cannot insert duplicate key row in object 'dbo.AspNetUsers' with unique index 'UserNameIndex'无法在具有唯一索引“UserNameIndex”的对象“dbo.AspNetUsers”中插入重复的键行
【发布时间】:2016-05-25 01:46:27
【问题描述】:

无法在具有唯一索引的对象中插入重复的键行

我正在尝试将我的用户转移到由 asp.net 身份创建的新数据库。但我得到这个错误:

无法在对象“dbo.AspNetUsers”中插入重复的键行 唯一索引“用户名索引”。

我的代码是:

INSERT INTO [dbo].[AspNetUsers]
(
[Id],
[UserName],
[UserNameRus],
[UserNameHeb],
[UserNameEng],
[Email],
[EmailConfirmed],
[PhoneNumberConfirmed],
[TwoFactorEnabled],
[LockoutEnabled],
[AccessFailedCount],
[Lang],
[isSendCommercial]
)
SELECT
NEWID(),
[UserName],
[UserNameRus],
[UserNameHeb],
[UserName],
[Email],
'false',
'false',
'false',
'true',
'0',
[Lang],
[isSendCommercial]
FROM [dbo].[Pj_Users]

有人可以向我解释一下,为什么会出现此错误以及如何解决?谢谢。

【问题讨论】:

  • 你能确认RDBMS吗?我假设它是 MS SQL Server。查看表“dbo.AspNetUsers”上的唯一索引“UserNameIndex”。您可能会发现它包含“用户名”列,并且表“dbo.Pj_Users”有两行具有相同的“用户名”。
  • 谢谢!这帮助很大!

标签: sql database asp.net-identity


【解决方案1】:

AspNetUsers 背后的代码是

CREATE TABLE [dbo].[AspNetUsers] (
    [Id]                   NVARCHAR (128) NOT NULL,
    .
    .
    .
    CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC)
);


GO
CREATE UNIQUE NONCLUSTERED INDEX [UserNameIndex]
    ON [dbo].[AspNetUsers]([UserName] ASC);

在我的旧数据库中,用户有一个唯一的电子邮件,并且可能有不唯一的用户名。我找不到解决此问题的答案,因此我将数据库中的最后两行更改为:

CREATE UNIQUE NONCLUSTERED INDEX [EmailIndex]
    ON [dbo].[AspNetUsers]([Email] ASC);

这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多