2016-09-13 8 views
1

DB 테이블 products에 5 개의 열이 있습니다. Id이 기본 키입니다. SQL Server Management Studio를, 당신은 분명히 여기 볼 수 있습니다SQL Server에서 키가 아닌 속성에 대해 "중복 키"오류가 발생합니까?

screenshot 1

나는 productId = 69 Name = "잔디 다트"가. Id = 420 및 Name = "잔디 다트"라는 신제품을 삽입하려고합니다. ID 삽입을 사용하여 삽입 된 제품의 ID를 지정할 수 있습니다. 따라서 이름은 동일하지만 이드는 다릅니다. 이건 아무 문제 없어. 맞지?

C# 콘솔 응용 프로그램에 삽입하려면 LINQ -> SQL을 사용하고 있습니다. 저도 같은 Name하지만 다른 Id 뭔가를 삽입 할 때, 나는 다음과 같은 오류 메시지가 :

개체에 고유 인덱스 'IX_Name'와 'dbo.Products를'중복 키 행을 삽입 할 수 없습니다. 중복 키 값은 (잔디 다트)입니다.

왜 키가 아닌 경우?

+0

당신은 확실히 당신의 이름 열에 고유 인덱스 (IX_Name)가 있습니다. 그게 오류입니다. SSMS에서 테이블에 대한 키 폴더를 열고 거기를보십시오. 두 번째 오류는 사용자가 고유 한 값을 ID 열에 삽입 할 수 없다는 것을 알려줍니다. 그렇게하기 위해서는'SET IDENTITY_INSERT TableName ON'을 사용해야하며, 끝나면'OFF'로 설정해야합니다. – rook

+0

@rook 네, 맞습니다. 나는 잘못된 설정을 조사하고있었습니다. 나는 칼럼을 오른쪽 클릭하고'칼럼/키 ... '를 클릭해야했다. 'product'가 정의 된 C# 코드에는 명확하게 IsUnique 주석이 있습니다. 그들의 첫번째 모습을 보았을 것입니다 ... – AlbatrossCafe

답변

2

글쎄, 내가 만든 것보다 훨씬 간단했다. 포인터에 대한 @rook 덕분입니다.

Name 열이 기본 키가 아니더라도 "고유 인덱스"로 지정되었습니다. SQL Server Management Studio에서 잘못된 설정을보고 있었으므로 놓쳤습니다. 나는 "속성"을보고있었습니다. 내가해야 할 일은 "이름"열을 마우스 오른쪽 버튼으로 클릭하고 "색인/키 ..."옵션을 선택하는 것입니다. 그러면 Is Unique 속성을 "No"로 설정할 수있는 창이 나타납니다. 내가 코드 첫 번째 마이그레이션을 사용하고 있기 때문에

screenshot

또는, 나는 그것이 C#으로 정의 된 속성에서 데이터-주석을 제거하고이 경로를 통해 DB를 업데이트를 진행할 수 있습니다.

하기 전에 :

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

후 :

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