2012-09-04 2 views
3

엔터티 프레임 워크 5에서 char 열거 형을 처리 할 수 ​​있습니까? 나는 int 함께 작동하도록 있지만 char 함께 데이터베이스의 열 char (1) 아래에 오류가 나타납니다.Entity Framework 5 및 Char Enums

The 'Gender' property on 'Division' could not be set to a 'String' value. You must set this property to a non-null value of type 'Gender'. 

public enum Gender 
{ 
    Male = 'M', 
    Female = 'F' 
} 

답변

7

enum 유형은 char 유형이 아니고 int 유형입니다. 각각 실제로 77과 70이다 당신의 열거 멤버의

Console.WriteLine(typeof(Gender).GetEnumUnderlyingType()); 

System.Int32 
Press any key to continue . . . 

값 :

Console.WriteLine((int)Gender.Male); 
Console.WriteLine((int)Gender.Female); 

77 
70 
Press any key to continue . . . 

에만 유효 C#으로 열거 유형의 종류를 기본/VB.NET은 다음 줄은 당신이 표시됩니다 바이트, sbyte, short, ushort, int, uint, long 및 ulong. 이 같은이 목록에없는 기본 유형을 넣어하려고하면 :

error CS1008: Type byte, sbyte, short, ushort, int, uint, long, or ulong expected 

이 C#에서 열거 뒤에 이론은 다음과 같습니다

public enum Gender : char 
{ 
    Male = 'M', 
    Female = 'F' 
} 

다음과 같은 컴파일 오류가 발생합니다. 이제 EF 파트 -EF는 현재 enum에 대한 기본 유형 인 Edm.Byte, Edm.SByte, Edm.Int16, Edm.Int32 및 Edm.Int64 만 지원합니다 (Edm 유형 시스템에는 부호없는 유형이 없음). 열거 형 속성의 경우 데이터베이스의 해당 열은 속성의 열거 형 유형과 기본 유형이 일치해야합니다. 즉 열거 형 속성의 기본 형식이 Edm.Int32이고 열의 형식이 int 유형이어야합니다.

귀하의 경우 - 열거 형과 함께 가고 싶다면 데이터베이스의 열은 int 유형이어야합니다. 엔티티를 추가 할 때 열에 70 및 77 값이 표시되어야합니다.

+0

SqlServer가 SByte를 지원하지 않는 것으로 보입니다. 다른 데이터베이스의 경우 확실하지 않습니다. 그것은 당신이 enum : sbyte를 MSSQL과 인터페이스 할 때 타입으로 사용할 수 없다는 것을 의미합니다. –

+0

이 답변은 EF 특정 SQL Server가 아닙니다. EF 관점에서 볼 때 sbyte는 enum 유형의 유효한 기본 유형입니다. sbyte 형식이 작동하지 않는 Sql Server와 관련하여 정확합니다. – Pawel