2013-07-10 4 views
2

엔티티를 열거 형에 매핑하려고합니다. 나는 소스에 대한 검색되면서 나는이 발견Automapper - 엔티티를 Enum으로 매핑

using Should; 

public enum OrderStatus : short 
{ 
    InProgress = 0, 
Complete = 1 
} 

public enum OrderStatusDto 
{ 
    InProgress = 0, 
Complete = 1 
} 

[Test] 
public void Example() 
{ 
    Mapper.Map<OrderStatus, OrderStatusDto>(OrderStatus.InProgress) 
       .ShouldEqual(OrderStatusDto.InProgress); 
    Mapper.Map<OrderStatus, short>(OrderStatus.Complete).ShouldEqual((short)1); 
    Mapper.Map<OrderStatus, string>(OrderStatus.Complete).ShouldEqual("Complete"); 
    Mapper.Map<short, OrderStatus>(1).ShouldEqual(OrderStatus.Complete); 
    Mapper.Map<string, OrderStatus>("Complete").ShouldEqual(OrderStatus.Complete); 
} 

을하지만 이것은 단지 열거 - 투 - 열거 매핑을 위해 작동합니다 생각합니다. .ShouldEqual을 사용하려고 시도하면 intellisense에서 찾을 수 없기 때문입니다. 해당 코드 블록에는 이라는 참조가 있습니다.해야하지만 어디서나 해당 참조를 찾을 수 없습니다.

automapper를 사용하여 enum과 entity/class를 매핑하는 방법에 대한 아이디어가 있으십니까? 사용에 대한 아이디어가 있습니까?

@I 실제 코드를 보지 않아도 솔루션을 고려하기가 어렵 기 때문에 질문이 업데이트되었습니다. 여기에 필요한 될 수있는 코드입니다 :

public class ParameterEnum 
{ 
/// <summary> 
/// Enum Sayisi: 2650, Son Guncelleme Tarihi: 21.2.2013 09:40:37 
/// </summary> 
public enum Parameters : int 
{ 
... 
IsEmriTuruIsTalebi = 138, 
<summary> 
Adi: Kalite Öneri; ID: 2218; Seviyesi: 3; Aciklamasi: ; Aktif Mi: True 
</summary> 
...}} 

은이 정상에 매핑이 이루어 곳이다 :

    isEmriEntity.IsEmriTuruId = (int)ParameterEnum.Parameters.IsEmriTuruIsTalebi; 
+0

'ShouldEqual'은이 기능을 보여주는 테스트의 일부입니다. AutoMapper의 일부가 아니므로 필요하지 않습니다. –

+0

그러면 ** ForMember ** 메소드가이 메소드에서도 작동해야합니까? –

답변

2

당신은 ITypeConverter으로 보일 것입니다. 이런 식으로 뭔가가 작업 수행해야합니다

Mapper.CreateMap<OrderStatus, OrderStatusDto>().ConvertUsing(new OrderStatusConverter()); 

을하고 컨버터과 같이 보일 것이다 : 당신의 DTO들에 다른 크로스 타입 매핑에 동일한 접근 방식을 적용하기에 충분합니다

public class OrderStatusConverter: ITypeConverter<OrderStatus, OrderStatusDto> 
{ 
    public OrderStatusDto Convert(OrderStatus source) 
    { 
     return (OrderStatusDto)source; 
    } 
} 

.

편집 : (열거가 DTO 아니다) 명확성을 위해 예로서이를 사용하여 열거 형 변환 오류에

:

public enum ExampleEnum : short 
    { 
     SomeValue, 
     SomeOtherValue, 
     BigValue = 100, 
    } 

    public enum AnotherEnum 
    { 
     Foo, 
     Bar, 
    } 

이 열거 변환 명확를해야한다 (안 전혀 int로 캐스트).

private void Test() 
    { 
     // Casting to int only works when the value is 0 

     // This works (SomeValue = 0) 
     AnotherEnum example = (int) ExampleEnum.SomeValue; 

     // This won't even compile (SomeOtherValue = 1) 
     AnotherEnum example2 = (int) ExampleEnum.SomeOtherValue; 

     // Casting to another enum works fine 
     AnotherEnum example2 = (AnotherEnum) ExampleEnum.SomeOtherValue; 

     // Just be careful of values that don't exist in the target enum 
     // This will compile even though it won't work at run-time (BigValue = 100) 
     AnotherEnum example2 = (AnotherEnum) ExampleEnum.BigValue; 
    } 
+1

감사합니다. int 캐스트가 잘못되었습니다. 이제 VisualStudio를 편리하게 사용할 수 있으므로 브라우저에서 '코딩'대신 검사 할 수있었습니다. 희망이 대답은 지금 명확합니다. – nathanchere