2012-02-02 1 views
2

내가 가지고있는 다음과 같은 상황 (C 번호) :Automapper 예기치 않은 동작

public class A: B 
{ 
     public ComplexType MyCT {get;set;} 

} 

public class B: 
{ 
     public string MyString {get;set;} 

} 

I가의 인스턴스를 가지고 난 이후로 B의 인스턴스에 매핑하는 Automapper를 사용하려면 매핑 "MyCT"는 필요하지 않습니다 (이것은 분명히 줄여 진 버전입니다).

B myB = Mapper.Map<A, B>(myA); 

하지만 난 MYB 뭔가 (내가 그래서 만약 당신이 좋아하면, 그것을 멀리 던져하려고, 내 복합 형식을 처리 할 수없는 푸른로 저장하고있어) 예외가 발생 말을하려고 할 때 내 그 MyCT는 여전히 myB 객체 주위에 매달려 있습니다.

디버깅 할 때 A로 캐스팅하고 MyCT에 액세스 할 수 있는지 확인하십시오.

실종 된 점은 두 가지 유형 간의 상속 관계를 근본적으로 상실한 것 같습니다.

+0

Mapper.CreateMap() 표현이 어떤 모양입니까? 내 내기는 네가 갖고 있지 않다는거야. –

+0

모두에게 감사드립니다! 말할 필요도없이 당신은 모두 정확했다. 나는 CreateMaps를 가지고 있었지만 (전에 Automapper를 많이 사용 해왔다.) 그러나 호출하고 있던 메소드는 호출되지 않았다. 그것은 그날 늦었고 Map에 대한 나의 호출은 "Automapper가 설정되지 않았다"예외를 던져 버릴 것이라고 생각했습니다. – ozz

답변

2

그것은 당신이 단순히 두 종류의 매핑을 정의하지 않은 다음과 같습니다

Mapper.CreateMap<A, B>(); 

(당신이 Getting Started 살펴보고이를 안내하는 경우 이러한 매핑을 중앙 집중화 할 수있는 방법에 대한 몇 가지 힌트를 제공합니다 응용 프로그램 시작에 한 곳에서 구성.)

그것은, Automapper가 B 형태로 A 인스턴스의 업 캐스팅에 다시 떨어지고 정의 된 두 가지 유형 간의 매핑없이 그렇게 보인다. Automapper는 명시 적으로 두 유형 간의 매핑에 대해 알고있는 경우에만 수행 할 수있는 flattening을 실제로 얻고 자합니다.

다음은이를 보여주는 코드 예제는 다음과 같습니다

using System; 
using AutoMapper; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     B b = Mapper.Map<A, B>(new A()); 
     Console.WriteLine(b.GetType()); //A 

     Mapper.CreateMap<A, B>();  //define the mapping 
     b = Mapper.Map<A, B>(new A()); 
     Console.WriteLine(b.GetType()); //B 

     Console.ReadLine(); 
    } 
} 

public class A: B 
{ 
} 

public class B 
{ 
} 
1

Mapper.CreateMap<A, B>()을 추가하십시오.