如何使用automapper从嵌套列表映射到目标对象?

问题描述 投票:0回答:1

我有一个像这样的源对象:

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; }
}

在我的应用程序的不同部分,我已经使用“个人档案”将我的EntityDto映射到我的实体:

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-framework asp.net-core automapper dto
1个回答
1
投票

一个与另一个无关。您定义的映射将根据提供给它的对象类型和/或指定的泛型类型参数来使用。换句话说,像_mapper.Map<SomeModel>(parentDto)这样的东西将使用CreateMap<ParentDto, SomeModel>定义,而_mapper.Map<Entity>(entityDto)将使用CreateMap<EntityDto, Entity>定义。

现在,当AutoMapper获取映射集合属性时,默认情况下它将使用EntityDTO-> Entity映射的定义,但是如果您通过MapFrom指定自定义映射,那么这将优先。

© www.soinside.com 2019 - 2024. All rights reserved.