我有一个包含5列的数据库表products
。 Id
是主键。在SQL Server Management Studio中,您可以在此处清楚地看到:
我有product
Id
= 69和Name
=“草坪飞镖”。我正在尝试使用Id
= 420和Name
=“草坪飞镖”插入新产品。我正在尝试使用标识插入,以便我可以为插入的产品指定ID。所以名称是相同的,但Id是不同的。这应该没问题,对吧?
我正在使用LINQ - >要插入C#控制台应用程序的SQL。当我尝试插入具有相同Name
但不同Id
的内容时,收到以下错误消息:
无法在具有唯一的对象'dbo.Products'中插入重复的键行 index'IX_Name'。重复的键值是(草坪飞镖)。
为什么,如果它是非密钥?
答案 0 :(得分:2)
嗯,这比制作它简单得多。感谢@rook指点。
即使Name
列不是主键,也指明它是一个"唯一索引"。我在SQL Server Management Studio中查找错误的设置,所以我错过了它。我正在寻找"属性"。我需要做的是右键点击" name"列,然后选择"索引/键..."选项。这会打开一个窗口,我可以将属性Is Unique
转换为" No"。
或者,由于我使用的是代码优先迁移,我可以从C#中定义的属性中删除数据注释,然后通过此路由继续更新数据库。
<强>之前:强>
[Index(IsUnique = true)]
[MaxLength(255)]
public string Name { get; set; }
<强>后:强>
[MaxLength(255)]
public string Name { get; set; }