2016-09-13 66 views
1

我有一個數據庫表products 5列。 Id是主鍵。在SQL Server Management Studio中,你可以清楚地看到這這裏:SQL Server爲非關鍵屬性提供「重複鍵」錯誤?

screenshot 1

我有一個productId = 69和Name = 「草坪飛鏢」。我試圖插入一個新產品Id = 420和Name =「草坪飛鏢」。我正在嘗試使用標識插入,以便我可以指定插入產品的標識。所以名稱是相同的,但Id是不同的。這應該沒問題吧?

我正在使用LINQ-> SQL插入到C#控制檯應用程序中。當我嘗試用相同的Name但不同Id插入一些東西,我收到以下錯誤信息:

不能在對象插入重複鍵行「dbo.Products具有唯一 指數「IX_Name」。重複的鍵值是(草坪飛鏢)。

爲什麼,如果它是非關鍵?

+0

你一定有你的名字列的唯一索引(IX_Name)。那是什麼錯誤。在SSMS中爲您的表格打開密鑰文件夾並在那裏看到。 第二個錯誤告訴您不能在標識列中插入自己的值。要做到這一點,你需要啓用:SET IDENTITY_INSERT TableName ON,當然你可以將它設置爲OFF。 – rook

+0

@rook是的,你是對的。我只是看着錯誤的設置。我不得不右鍵單擊列並單擊索引/鍵...而不是僅查看常規列屬性。在定義'product'的C#代碼中,它顯然也具有'IsUnique'註釋。應該看看他們的第一個... – AlbatrossCafe

回答

2

好吧,這比我做得更簡單。感謝@rook指針。

儘管Name列不是主鍵,但它被指定爲「唯一索引」。我在SQL Server Management Studio中查找錯誤的設置,所以我錯過了它。我正在尋找「屬性」。我需要做的是右鍵單擊「名稱」列並選擇「索引/鍵...」選項。這會彈出一個窗口,我可以將屬性Is Unique設置爲「否」。

screenshot

或者,由於我使用代碼優先遷移,我可以從當在C#中定義的屬性中刪除數據的註釋,並繼續通過該路由更新DB。

前:

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

後:

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