我有一个像这样的源对象:
public class ParentDto
{
public List<EntityDto> EntityDtos { get; set; }
// some other stuff...
}
和这样的目标对象:
public class SomeModel
{
[Key]
public Guid Id { get; set; }
public Entity Entity { get; set; }
}
在应用程序的另一部分中,我已经通过使用配置文件将EntityD映射到我的实体:
CreateMap<EntityDto, Entity>()
.ForMember(dest => dest.Member,
opt => opt.MapFrom(src => DoSomeStuff(src.AnotherMember)))
.ForMember(dest => dest.YetAnotherMember,
opt => opt.MapFrom(src => DoSomeOtherStuff(src.Whatever)));
是否可以重用此映射以便也映射我的父对象Dto,其中包括entityDtos列表?
CreateMap<ParentDto, SomeModel>()
.ForMember(dest => dest.Id,
opt => opt.Ignore())
// some more stuff...
// This is where I am struggling!
.ForMember(dest => dest. Entity,
opt => opt.MapFrom(src => src.EntityDtos[0]));
我该如何解决已经存在EntityDto到Entity的映射以及必须处理列表的事实?
答案 0 :(得分:1)
一个与另一个无关。您定义的映射是根据馈入其中的对象的类型和/或指定的通用类型参数使用的。换句话说,类似_mapper.Map<SomeModel>(parentDto)
的事物将使用CreateMap<ParentDto, SomeModel>
的定义,而_mapper.Map<Entity>(entityDto)
的事物将使用CreateMap<EntityDto, Entity>
的定义。
现在,当AutoMapper映射到collection属性时,默认情况下它将使用EntityDTO-> Entity映射的定义,但是,例如,如果您通过MapFrom
指定自定义映射,则该优先级高