Как отобразить из вложенного списка в целевой объект с помощью автоматического преобразователя? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть исходный объект, например, так:

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 со своимEntity с помощью Profiles:

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 и тот факт, что мне приходится иметь дело со списком?

1 Ответ

1 голос
/ 11 апреля 2019

Один не имеет ничего общего с другим. Определенные вами сопоставления используются на основе типов объектов, которые в него подаются, и / или указанных параметров общего типа. Другими словами, что-то вроде _mapper.Map<SomeModel>(parentDto) будет использовать определение CreateMap<ParentDto, SomeModel>, а _mapper.Map<Entity>(entityDto) будет использовать определение CreateMap<EntityDto, Entity>.

Теперь, когда AutoMapper перейдет к отображению свойства коллекции, он по умолчанию будет использовать определение для EntityDTO-> Entity mapping, но если вы укажете пользовательское отображение, например, с помощью MapFrom, тогда это будет иметь приоритет.

...