Используя AutoMapper, как использовать родительское свойство в дочерней коллекции? - PullRequest
0 голосов
/ 30 марта 2020

Как использовать AutoMapper, как использовать родительское свойство в дочерней коллекции?

Я хочу сопоставить этот класс:

public class ParentModel
{

    public int Id { get; set; }

    public string Test { get; set; }

    public ICollection<ChildModel> Children { get; set; }

}

К этому классу:

public class ParentDTO
{
    public int Id { get; set; }

    public string Test { get; set; }

    public ICollection<ChildDTO> Children { get; set; }

}

И имеют следующие сопоставления:

    CreateMap<ParentModel, ParentDTO>()
            .ForMember(d => d.Children , opt => opt.MapFrom(s => s.Children))

    ;

    CreateMap<ChildModel, ChildDTO>()
    ;   

Класс ChildDTO имеет свойство с именем Test , и значение должно поступать из ParentModel свойство classes с именем Test

public class ChildDTO
{

    public int Id { get; set; }

    public string Name { get; set; }

    //Take Me From The Parent Class
    public string Test { get; set; }

}

Что я указываю в сопоставлениях, чтобы сделать это реальностью?

Все, что я хочу используйте в коде

var dto = Maper.Map<ParentDTO>(parentModel);

И для этого DTO включите дочерние DTO с полем Test, сопоставленным с родителем.

1 Ответ

0 голосов
/ 30 марта 2020

Все отсортировано.

В конце пошли вниз по маршруту Решатель пользовательских значений.

public class MyCustomResolver : IValueResolver<ParentModel, ParentDTO, ICollection<ChildDTO>>
{
    public ICollection<ChildDTO> Resolve(ParentModel source, ParentDTO destination, ICollection<ChildDTO> destMember, ResolutionContext context)
    {
        return source.Children.Select(s => new ChildDTO
        {

            Id = s.Id,
            Name = s.Name,
            Test = source.Test


        }).ToList();

    }
}       


CreateMap<ParentModel, ParentDTO>()
       .ForMember(dest => dest.Children, opt => opt.ResolveUsing<MyCustomResolver>());
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...