2012-08-30 5 views
7

저는 Entity Framework 코드 우선을 사용하고 있습니다. 나는 100 행을 초과하지 않을 테이블이 있고 기본 키로 데이터 유형 byte (SQL 서버에 tinyint)을 사용하고 싶습니다.바이트를 기본 키 데이터 유형으로 사용

이것은 내가 지금까지 무엇을 가지고 : 엔티티 프레임 워크는 데이터베이스를 만들 때

[Key] 
public byte Id { get; set; } 

문제는, 그것은 삽입에 자동 증가에 행을 허용 신원 사양 속성을 설정하지 않습니다.

데이터 형식을 Int16 (SQL Server의 경우 smallint)으로 변경하면 모든 것이 완벽하게 작동합니다.

Entity Framework에 자동 증가 속성을 설정하도록 지시하는 방법이 있습니까? 아니면 Entity Framework에서 기본 키로 사용하지 않을 수 있습니까?

+5

왜 이런 식으로 데이터베이스를 제한 하시겠습니까? 행 수가 적 으면 추가 된 공간이 아프지 않습니다. – delnan

+2

@delnan, 맞아, 왜 varchar (100) **';-) **. 특히 PK의 경우 가장 올바른 제한적인 데이터 유형을 선택해야합니다. 이 PK를 5,000 만 개의 행이있는 테이블에서 FK로 사용하고 인덱스를 추가하면 차이가 있습니다. 열 크기는 디스크 공간 이상에 영향을 미치며 캐시 메모리에 대해 생각하고 사소한 데이터 유형 선택 오류로 낭비하는 정도를 생각하면됩니다. 또한 응용 프로그램이 작동을 멈추고 범위 또는 범위 값을 삽입하려고하면 오류가 발생합니다. –

답변

13

byte 유형은 키와 ID 열로 지원됩니다. 신원으로 byte 기본 키를 표시하는 것은 기본값이 아닙니다. 그러나이 기본 덮어 쓸 수 있습니다 :

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public byte Id { get; set; } 

는 (? 더 많은 종류를 아마도)의 Identity 옵션을 명시 적으로 int에 필요하지 않은 longshort 설정을하지만, SQL에서 tinyintbyte (=입니다 섬기는 사람). 테스트를 통해 알아 냈지만 어디에서나 공식적으로 문서를 찾을 수 없습니다.

+0

완벽한! 정확히 내가 무엇을 찾고 있었는지! 고맙습니다! – user962926

+0

비 식별 프라이 머리 키인'short' 속성의 경우이 속성을'DatabaseGeneratedOption.None' 값과 함께 사용해야했습니다. 감사! – STW

+0

새로운 Add-Migration으로 간단히 tacking하면 나를 위해 작동하지 않습니다. IDENTITY (1,1)은 추가하지 않았습니다. 마지막으로 추가하기 전에 마이 그 레이션과 테이블을 삭제해야했습니다. EF 6.1.3을 사용하고 있습니다. –

관련 문제