SQL Server为非键属性提供“重复键”错误?

时间:2016-09-13 01:14:49

标签: c# sql-server linq-to-sql identity-insert

我有一个包含5列的数据库表productsId是主键。在SQL Server Management Studio中,您可以在此处清楚地看到:

screenshot 1

我有product Id = 69和Name =“草坪飞镖”。我正在尝试使用Id = 420和Name =“草坪飞镖”插入新产品。我正在尝试使用标识插入,以便我可以为插入的产品指定ID。所以名称是相同的,但Id是不同的。这应该没问题,对吧?

我正在使用LINQ - >要插入C#控制台应用程序的SQL。当我尝试插入具有相同Name但不同Id的内容时,收到以下错误消息:

  

无法在具有唯一的对象'dbo.Products'中插入重复的键行   index'IX_Name'。重复的键值是(草坪飞镖)。

为什么,如果它是非密钥?

1 个答案:

答案 0 :(得分:2)

嗯,这比制作它简单得多。感谢@rook指点。

即使Name列不是主键,也指明它是一个"唯一索引"。我在SQL Server Management Studio中查找错误的设置,所以我错过了它。我正在寻找"属性"。我需要做的是右键点击" name"列,然后选择"索引/键..."选项。这会打开一个窗口,我可以将属性Is Unique转换为" No"。

screenshot

或者,由于我使用的是代码优先迁移,我可以从C#中定义的属性中删除数据注释,然后通过此路由继续更新数据库。

<强>之前:

[Index(IsUnique = true)]
[MaxLength(255)]
public string Name { get; set; }

<强>后:

[MaxLength(255)]
public string Name { get; set; }