2010-12-05 2 views
3

AutoMapper를 사용하여 DTO에 내 개체를 매핑하고 있습니다. 내 엔티티 중 일부는 파생 된 엔티티에 의해 무시 될 수있는 가상 속성을가집니다. 필자는 정의 된 기본 클래스를 사용하여 가상 속성을 매핑합니다. 그러나 파생 클래스를 매핑 할 때 AutoMapper는 재정의 된 클래스 대신 가상 속성의 기본 구현을 매핑합니다. 내가 제목을 넣을 때AutoMapper를 사용하여 속성을 재정의하는 파생 클래스 각각에 대해 가상 속성을 명시 적으로 매핑하지 않고 매핑하는 방법은 무엇입니까?

DerivedTypeDto dto = Mapper.Map<DerivedType, DerivedTypeDto>(instance); 

: 마지막으로 매핑을

CreateMap<BaseType, BaseTypeDto>() 
    .ForMember(n => n.Title, p => p.MapFrom(q => q.Title ?? "-")) 
    .Include<DerivedType, DerivedTypeDto>(); 

CreateMap<DerivedType, DerivedTypeDto>() 

을 그리고 : 매핑 구성을 위해 이제

public class BaseType 
{ 
    public virtual string Title 
    { 
     get { return string.Empty; } 
    }  
} 

public class DerivedType : BaseType 
{ 
    public override string Title 
    { 
     get { return Name; } 
    }  

    public string Name { get; set; } 
} 

public class BaseTypeDto 
{ 
    public string Title { get; set; }  
} 

public class DerivedTypeDto : BaseTypeDto 
{ 
    public string Name { get; set; }  
} 

을 :

나는 클래스 정의로 시작합니다 파생 된 형식을 구성하는 CreateMap 호출에 매핑하면 작동합니다. 그러나 약 20 개의 파생 된 형식이 있으므로 기본 클래스에 Title 매핑을 구성하고 각 파생 클래스에 대해 반복하지 않아도됩니다.

AutoMapper로 가능합니까?

답변

1

ConstructUsing() 옵션을 사용할 수 없습니까? 이렇게하면 기본 클래스 개체에 항상 매핑 할 대리자가있을 수 있습니까?

CreateMap<basetype, baseTypeDto>() 
    .ConstructUsing(y => base.title = basetype.title);