2011-05-10 3 views
2

사례가 간단합니다. 자식 개체를 참조하는 루트 도메인 개체가 있습니다. 도메인 객체를 나타내는 서비스 호출에서 DTO를 전달했지만 매번 하위 객체를 전달하는 대신 DTO는 하위 객체의 키 값을 보유하는 속성을 포함합니다. 다음과 같은 내용이 있습니다 :AutoMapper를 사용하여 키 값을 기반으로 참조를 지정하는 방법은 무엇입니까?

public class DomainObject 
{ 
    public ChildObject Child { get; set; } 
    public String Name { get; set; } 
} 

public class ChildObject 
{ 
    public Int32 Key { get; set; } 
    public String Name { get; set; } 
} 

public class DTO 
{ 
    public Int32 ChildKey { get; set; } 
    public String Name { get; set; }  
} 

나는 ChildObject의 캐시 된 목록을 가지고 있습니다. DTO => DomainObject에서 매핑 할 때 DTO.ChildKey 속성을 사용하여 캐시에서 ChildObject의 기존 인스턴스에 DomainObject.Child 속성을 설정하려고합니다. 이 작업에는 사용자 지정 값 해결 프로그램이 필요합니까? 아니면이 작업을 수행하는 다른 방법이 있습니까?

답변

1

예 맞춤 값 해결 프로그램이 필요합니다. 이런 식으로 뭔가가 그것을 할 것입니다 : 다음

public class KeyToChildObjectResolver : ValueResolver<Int32, ChildObject> 
{ 
    protected override ChildObject ResolveCore(Int32 source) 
    { 
     return Cache.Get<ChildObject>(source); 
    } 
} 

과 :

Mapper.CreateMap<DTO, DomainObject>() 
     .ForMember(x => x.Child, o => o.ResolveUsing<KeyToChildObjectResolver>() 
            .FromMember(x => x.ChildKey)); 

당신은 ChildObject에 DTO에서 바로 이동하지만 다음 해결은 본질적으로 하나의 목적이다 리졸버와 함께 할 수 있습니다. 이렇게하면 ChildObject에 매핑 될 자식 키가있는 곳이면 어디서든 사용할 수 있습니다.

관련 문제