2011-03-29 10 views
0
CreateMap<Customer, CustomerStubDTO>(); 
class Customer 
{ 
    int Id { get; set; } 
    string Name { get; set; } 
} 

class CustomerStubDTO 
{ 
    int Id { get; set; } 
} 

class CustomerDTO : CustomerStubDTO 
{ 
    string Name { get; set; } 
} 

class Order 
{ 
    Customer Customer { get; set; } 
} 

class OrderDTO 
{ 
    CustomerStubDTO Customer { get; set; } 
} 

그리고 다음과 같은 매핑 :AutoMapper가 지원되지 않는 다형성?

CreateMap<Order, OrderDTO>(); 
CreateMap<Customer, CustomerDTO>(); 

이것은 작동하지 않습니다. AutoMapper는 대신 다음과 같은 매핑을 원합니다 :

CreateMap<Customer, CustomerStubDTO>(); 

하지만 원하는 바입니다. OrderDTO.Customer 대신 CustomerDTO의 인스턴스를 포함하여 Name 속성에 액세스 할 수 있도록해야합니다.

소스 클래스에 다른 파생 클래스가있는 경우이 동작에 .Include<TSource, TDestination>을 사용할 수 있었지만 독립형이 아닌 경우에는 사용할 수있었습니다. (예를 들어, CustomerStubDTO에 해당하는 CustomerStub와 CustomerDTO에 해당하는 Customer가있는 경우)

다음과 같은 경우는 작동하지 않습니다.

CreateMap<Customer, CustomerStubDTO>().Include<Customer, CustomerDTO>(); 

아이디어가 있습니까?

답변

0

소스를 다운로드하고 살펴보고 지원되는이 시나리오를 찾을 수 없습니다.

직접 구현 했으므로 패치를 제출하겠습니다.

+0

안녕하세요, 전 똑같은 문제가 있습니다. 어딘가에 해결책을 제출할 수 있습니까? – zidane

-1

뭘 하려는지 확실치 않습니다. 당신이 "CustomerDTO"를 입력 OrderDTO에서 "고객"을 변경하면 예상대로 다음 작품 : 당신은 당신이 대신 다음 CreateMap<Customer, CustomerStubDTO>();을 고객 -> CustomerStubDTO지도 것 주문에 "CustomerStubDTO"를 유지하고 싶었다면

Mapper.CreateMap<Customer, CustomerDTO>(); 
Mapper.CreateMap<Order, OrderDTO>(); 
Customer customer = new Customer{Id=1,Name="John"}; 
Order order = new Order{Customer = customer}; 
var orderDto = Mapper.Map<Order, OrderDTO>(order); 

는 방법입니다 당신이 언급 한대로 가야합니다.

Automapper는 TypeMap을 만들 때 계승을 고려하지 않고 내부적으로 어디에 매핑 할지를 결정합니다. 나는 그 일을하는 것이 합리적이지 않다고 확신한다.

+0

네, 제가 성취하려고 시도한 것은 불가능했습니다. 이미이 새로운 기능을 구현하기위한 패치를 제출했습니다. 다음은 커밋입니다 : http://bit.ly/fouNnj 참고. – andreialecu

관련 문제