2012-09-21 1 views
2

AutoMapper를 사용하여 매우 간단한 Enum을 매핑하려고합니다.AutoMapper Enum Byte 타입 초기화 예외

이 매핑이 존재하는 이유는 PriorityType이 서버에서 실행되는 내 dotnet 4.0 도메인 모델 어셈블리에 있지만 내 DataContract 어셈블리에 Dto 3.5가 필요합니다. 나는 byte 부모 타입을 주석 처리를 제거하면

public enum PriorityType// : byte 
{ 
    Low = 0, 
    Medium, 
    High, 
    Urgent 
} 

[Serializable] 
public enum PriorityTypeDto// : byte 
{ 
    Low = 0, 
    Medium, 
    High, 
    Urgent 
} 

Mapper.CreateMap<PriorityType, PriorityTypeDto>(); 

(정말 255 개 이상의 가능한 항목이 필요하지 않습니다!), 나는 TypeInitializationException를 얻을. ConvertUsing 중 하나를 사용하여 해결하지 못했습니다.

왜 딸꾹질 주위 byte?

편집 1

디버깅 AutoMapper은 또한, 본질적으로 이름이 같은 대응하는 속성의 검사 대상과 모든 쓰기 특성을 검색한다.

Enum의 경우 AutoMapper가 매핑하려고하는 반사음으로 볼 수있는 value__이라는 필드가 있습니다.

오류는 v2.2 (2.1에서 변경됨)와 다르지만 바이트 열을 매핑 할 때 예외가 발생하지만 int32 열거를 매핑 할 때 문제가 없습니다. 오류가 발생

여기

,

public delegate object LateBoundFieldGet(object target); 

Expression<LateBoundFieldGet> lambda = 
    Expression.Lambda<LateBoundFieldGet>(
     Expression.Convert(member, typeof(object)), 
     instanceParameter); 

return lambda.Compile(); 

lambda.Compile()InvalidProgramException 던진다.

아직도 이유를 이해하려고합니다.

편집 2

문제뿐만 아니라 AutoMapper GitHub 보도했다.

답변

1

CreateMap 호출이 필요하지 않습니다. AutoMapper는 구성없이 자동으로 enum 유형을 처리합니다. CreateMap을 제거하면 설정됩니다.

+0

작동 확인했습니다. –

+0

'바이트'에서 'enum'('System.DayOfWeek')으로 매핑하려고 할 때 오류가 발생합니다. 버전 3.3.1 사용 (현재 업그레이드 할 수 없음) – silkfire