2011-11-28 1 views
0

다운이 3 개 간단한 예를 들어, 내가 놓칠 유형과 고려 (I하지만 DomainObject과 WrapperClass 사이에 실제로에만 오토) :임베디드 타입의 속성에 대한 유형 구성 "을 사용하여"

public class DomainObject 
{ 
    public int Prop1 {get;set;} 
    public int Prop2 {get;set;} 
    public int ComputedValue1 {get;set;} 
    public int ComputedValue2 {get;set;} 
} 

public class DALEntity 
{ 
    public int Prop1 {get;set;} 
    public int Prop2 {get;set;} 
} 

public class Wrapper 
{ 
    public DALEntity ToFromDB {get;set;} 
    public int ComputedValue1 {get;set;} 
    public int ComputedValue2 {get;set;} 
} 

DomainObject가 무엇의 대부분을 내 응용 프로그램을 다루는 반면 DALEntity는 내 데이터 액세스 계층이 DB를 가지고 다룰 때 다루는 영역입니다. 유의하십시오 (이 경우) 2 개의 계산 된 값이 지속되지 않습니다 - 오히려 외부에서 계산됩니다 (이 예제에서는 그 방법이 중요하지 않음). 그러므로 나는 DALEntity에 포함시키지 않을 것입니다.

위로 향하는 (src == DALEntity, dest == DomainObject) ID는 Automapper가 DomainObject의 모든 필드에 대해 채울 방법을 알지 못한다고 말하면 "이 복잡한 속성에서 이름이 일치하는 속성을 찾습니다 ". 내가 이해할 수 있듯이 지금은 매핑을 만들 때 MapFrom을 통해 모든 속성을 명시 적으로 지정해야합니다. 맵핑하는 방법에 대해 "사용하는"종류의 명령문을 지정할 수있는 진정한 시간 절약 (덜 오류가 발생하기 쉬운) 일 것입니다.

나는이 현재 가능하면

:-) "힌트를 통해 투사"를 부를 수있는 것 같아요?

답변

0

계산 된 속성의 계산을 자체 클래스로 옮깁니다. 그런 다음 종속성 삽입을 사용하고 계산 된 속성이 삽입 된 클래스를 호출하여 자체 채워지도록 할 수 있습니다. AutoMapper는 이것을 알 필요가 없습니다. DO는 완벽하게 작동해야 할 필요가있는 것을 알고 있어야합니다. 그렇지 않으면 공장이해야합니다.

이렇게하면 클래스의 테스트 가능성이 높아집니다.

어쨌든이 경로를 계속 가고 싶다면 Automapper의 매핑 방법에 함수를 전달할 수 있습니다.

뭔가 같은 :

Mapper.CreateMap<DAL, DO>() 
       .ForMember(m => m.CalcProp, 
          opt => opt.MapFrom(src => 
          { anon function that calls calculating code, passing src }));