Сопоставить свойство вложенного списка 2-го уровня со свойством списка первого уровня с помощью autompper - PullRequest
0 голосов
/ 15 декабря 2018

Мне нужна твоя помощь.У меня есть базовый опыт работы с automapper, и все это прекрасно работает, но так или иначе я не могу сопоставить свое следующее изменение в исходном объекте с моим целевым объектом.

Позвольте мне объяснить это немного:
В IUser я добавил свойство 'UserDetails', и этот класс содержит свойство List of Guid под названием 'Domains'.

Я хочу отобразить это свойство списка второго уровня на мой объект UserDto, где список свойств guid находится на первом уровне.В приведенном ниже примере отображение Userkey работает нормально, но я получаю нулевое значение для «DomainIds» и не вижу, что я делаю неправильно.Я надеюсь, что вы можете помочь мне

public interface IUser
{
    UserKey Key { get; }
    UserDetails Details { get; set; }
    FirstName { get; }
}

public struct UserKey
{
    private readonly Guid _id;
    public UserKey(Guid id)
    {
        _id = id;
    }
}

public class UserDetails
{
    public List<Guid> Domains { get; set; }
}

public class UserDto
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public List<Guid> DomainIds { get; set; }
}

Настройка отображения следующая:

CreateMap<IUser, UserDto>()
            .ForMember(
                dest => dest.Id,
                opt => opt.MapFrom(src => src.Key.Id))
            .ForMember(
                dest => dest.DomainIds,
                opt => opt.MapFrom(src => src.Details.Domains))

В моем тесте я сопоставляю пользователя (который является IUser) следующим образом.К вашему сведению, все остальные свойства отображаются отлично

_mapper.Map<UserDto>(user);

1 Ответ

0 голосов
/ 15 декабря 2018

Мне кажется, что ваше отображение работает нормально:

Mapper.Initialize(config =>
{
    config.CreateMap<User, UserDto>()
        .ForMember(
            dest => dest.Id,
            opt => opt.MapFrom(src => src.Key.Id))
        .ForMember(
            dest => dest.DomainIds,
            opt => opt.MapFrom(src => src.Details.Domains));
});

var user = new User
{
    FirstName = "foo",
    Key = new UserKey { Id = Guid.NewGuid() },
    Details = new UserDetails
    {
        Domains = new List<Guid> { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() },
    },
};

var result = Mapper.Map<UserDto>(user);

Используются следующие типы:

public class User
{
    public UserKey Key { get; set; }
    public UserDetails Details { get; set; }
    public string FirstName { get; set; }
}
public class UserKey
{
    public Guid Id {get;set;}
}
public class UserDetails
{
    public List<Guid> Domains { get; set; }
}

public class UserDto
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public List<Guid> DomainIds { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...