Как разблокировать свойства, игнорируемые на другой карте? - PullRequest
0 голосов
/ 30 мая 2019

Источники для моего места назначения указаны в корневом dto и его дочернем свойстве:

public class Source {
    public AccountSource {get;set;}
    public string AccountKey {get;set;}
    public string AccountPassword {get;set;}
}

public class AccountSource {
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class Dest
{
    public Account Account { get; set; }

    public class Account
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public string Password { get; set; }
        public string Key { get; set; }
    }
}

В настоящее время у меня есть такое отображение:

CreateMap<Source, Dest>()
    .ForPath(x => x.Account.Id, o => o.MapFrom(x => x.Account.Id))
    .ForPath(x => x.Account.Name, o => o.MapFrom(x => x.Account.Name))
    .ForPath(x => x.Account.Key, o => o.MapFrom(x => x.AccountKey))
    .ForPath(x => x.Account.Password, o => o.MapFrom(x => x.AccountPassword));
CreateMap<AccountSource, Dest.Account>()
    .ForAllMembers(x => x.Ignore());

, но у него есть одна проблема: новые членыдобавленный к Dest.Account не будет проверен.

Если удалить ForPath и просто оставить

CreateMap<Source, Dest>();
CreateMap<AccountSource, Dest.Account>();

, тогда пароль и ключ не отображаются, поэтому я должен игнорировать их в такихway CreateMap<AccountSource, Dest.Account>().ForMember(x => x.Password, x=> x.Ignore()).ForMember(x => x.Key, x=> x.Ignore()).

Но тогда отмена раскладывания не работает (реквизиты абсолютно игнорируются, а не только когда происходит аккаунт → сопоставление аккаунта).

Ответы [ 2 ]

1 голос
/ 30 мая 2019

По умолчанию ForPath игнорирует Dest.Account, но вы всегда можете отобразить его явно:

    CreateMap<Source, Dest>()
        .ForPath(d => d.Account.Key, o => o.MapFrom(s => s.AccountKey))
        .ForPath(d => d.Account.Password, o => o.MapFrom(s => s.AccountPassword))
        .ForMember(d => d.Account, o => o.MapFrom(s => s.Account));
    CreateMap<AccountSource, Account>()
        .ForMember(d => d.Password, o => o.Ignore())
        .ForMember(d => d.Key, o => o.Ignore());
0 голосов
/ 31 мая 2019

Нашел другое решение:

CreateMap<Source, Dest>()
    .ForMember(x => x.Account, o => o.MapFrom(x => x));
CreateMap<Source, Dest.Account>()
    .ForMember(x => x.Id, o => o.MapFrom(x => x.AccountSource.Id))
    .ForMember(x => x.Name, o => o.MapFrom(x => x.AccountSource.Name))
    .ForMember(x => x.Password, o => o.MapFrom(x => x.AccountPassword))
    .ForMember(x => x.Key, o => o.MapFrom(x => x.AccountKey));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...