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

时间:2018-04-16 03:10:44

标签: c# sql .net sql-server

我收到此错误:

  

SqlException:无法在具有唯一索引“RoleNameIndex”的对象“dbo.AspNetRoles”中插入重复键行。重复键值为(Teacher)。声明已经终止。

我正在尝试为单个用户添加多个角色,在我的数据库表AspNetRoles中,我使用唯一的RoleNameIndex密钥。以下是AspNetRoles表格的屏幕截图:

AspNetRoles Table Design

现在,我的 AspNetUsers 表中的每个用户都被分配了一个角色。我想向用户添加另一个角色,但不断收到该错误。我该怎么办?请帮我解释一下代码。

我的代码使用用户ID和组合框的输入文本框来加载角色名称。单击按钮时,我的代码如下:

var newRole = RolecomboBox.Text;
var idnum = Int32.Parse(IdTxtArea.Text);
var item = _db.AspNetUserRoles.FirstOrDefault(w => w.UserId == idnum);

item.AspNetRole.Name = newRole;

1 个答案:

答案 0 :(得分:2)

您的问题解决方案所需的信息都在您给出的SqlException中。

  

SqlException:无法在具有唯一索引“ RoleNameIndex ”的对象“ dbo.AspNetRoles ”中插入重复的键行。重复键值为(教师)。声明已经终止。

我加了你需要的3条信息。

  1. dbo.AspNetRoles 是您尝试插入重复键行的表。
  2. RoleNameIndex 是您在表格中违反插入内容的唯一索引的名称。
  3. 教师是您唯一密钥的值。
  4. 为了在“教师”的dbo.AspNetRoles表中插入其他行,您需要删除唯一索引RoleNameIndex,因为这需要将Name列设置为唯一。