2016-12-05 2 views
1

우리는 엔티티의 정의가 바뀔 수있는 시간적 시스템을 설계하고 있습니다. Automapper를 설정하려고하는데 접두사가 어떻게 작동해야하는지 잘 이해할 수 없습니다. 다음 DTO와Automapper 소스 접두어 속성

public class ReferenceDataDefinition 
{ 
    public string Name { get; set; } 
} 

public class ReferenceData 
{ 
    public int Id { get; set; } 
    public ReferenceDataDefinition Current { get; set; } 
} 

: 예를 들어

, 나는 다음과 같은 엔티티 것 내가

CreateMap<ReferenceData, ReferenceDataDTO>() 
    .ForMember(p => p.Id, o => o.MapFrom(s => s.Id) 
    .ForMember(p => p.Name, o => o.MapFrom(s => s.Current.Name); 

사용할 수 있습니다 알고

public class ReferenceDataDTO 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

을하지만이 느낌 내가 할 수있는 더 똑똑한 것이 틀림 없어? RecognizePrefixes ("현재")를 추가하려고했지만 아무 효과가 없습니다.

답변

1

내가 RecognizePrefixes를 추가 시도했다 : Recognizing pre/postfixes 또한 RecognizePrefixes 소스 오브젝트 접두사 사용 RecognizeDestinationPrefixes 방법

확인이 이전 게시물 작동을 "현재")

접두어가 사용되는 방식이 아닙니다. 속성이 접두사로 시작되는 시나리오를위한 것입니다 (종종 데이터베이스 명명 스키마 때문). 예를 들어

, 다음과 같은 클래스가 있다면 :

public class ReferenceData 
{ 
    public int Ref_Id { get; set; } 
    public string Ref_Name { get; set; } 
} 

public class ReferenceDto 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

당신은 다음과 같은 접두사를 인식 할 수를 :

cfg.RecognizePrefixes("Ref_"); 

AutoMapper 다음 사용자가 정의 할 필요없이 두 객체를 매핑 할 수있을 것입니다 .ForMember과 관련된 특정 매핑 이 충분해야

CreateMap<ReferenceData, ReferenceDataDTO>() 
    .ForMember(p => p.Name, o => o.MapFrom(s => s.Current.Name); 

: 당신에 대해서

ReferenceDataReferenceDataDTO에 모두 Id 속성이 같은 이름을 갖고 있기 때문에 AutoMapper가 자동으로 추론 할 수있다, 당신은 이드의 멤버 매핑을 제거 할 수 있어야 매핑을 소유하고 있습니다.

.Current의 경우 Flattening을 사용하면 DTO 클래스를 변경하여 CurrentName으로 이름을 바꾸면 제거 할 수 있습니다.