2017-01-26 3 views
1

나는 다음과 같은 클래스가 :매핑 할 때 상위 속성을 설정 하시겠습니까?

public class ParentDto 
{ 
    public Guid Guid {get; set;} 
    public IEnumerable<Child> Children {get; set;} 

    public ParentDto() { Guid = Guid.NewGuid(); } 
} 

public class ChildDto 
{ 
    public Guid Guid {get; set;} 
    public Guid ParentGuid {get; set;} 
    public IEnumerable<GrandChild> GrandChildren {get; set;} 

    public ChildDto() { Guid = Guid.NewGuid(); } 
} 

public class GrandChildDto 
{ 
    public Guid Guid {get; set;} 
    public Guid ChildGuid {get; set;} 

    public GrandChildDto() { Guid = Guid.NewGuid(); } 
} 

매핑은 간단하다 : 현재

Mapper.Initialize(cfg => 
{ 
    cfg.CreateMap<ParentModel, ParentDto>().ReverseMap(); 
    cfg.CreateMap<ChildModel, ChildDto>().ReverseMap(); 
    cfg.CreateMap<GrandChildModel, GrandChildDto>().ReverseMap(); 
}); 

, 내가 먼저 내가 할 매핑을 수행

foreach (var child in parent.Children) 
{ 
    child.ParentGuid = parent.Guid; 

    foreach (var grandChild in child.GrandChildren) 
    { 
     grandChild.ChildGuid = child.Guid; 
    } 
} 

이가 있기 때문입니다 Guid 속성은 DTO 클래스에서만 찾을 수 있습니다.

매핑 구성 내에서 guids를 설정하고 foreach 블록을 피할 수 있습니까?

답변

1

AutoMapper는 맵 조작 전과 실행 코드를 지원합니다.

cfg.CreateMap<Source, Target>() 
    .AfterMap((src, dest) => { .. }); 

같은 코드로 정의 할 수 있습니다하지만 당신은 아마 당신의 DTO들이 조상 세대에 따라하는이 경우에만 사용할 수 있습니다 - 예를 들어, ParentDto에 ChildDTO가 포함되어 있습니다. 다른 항목은 서로 독립적이며 AutoMapper를 사용하면 foreach를 사용하는 것보다 훨씬 복잡 할 수 있습니다.