Как сделать вложенное отображение с AutoMapper? - PullRequest
0 голосов
/ 04 мая 2018

У меня есть сущность и модель, определенные следующим образом:

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }   
    public string LastName { get; set; }    
    public Location Location { get; set; }            
    public string Gender { get; set; }    
    public string Skills { get; set; }    
    public bool isPrivate { get; set; }
}

public class Location
{
    public int Id { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}

public class UserModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Location Location { get; set; }
    public bool isPrivate { get; set; }
}

Затем я настроил профиль сопоставления, определенный следующим образом:

public MappingProfile()
{
    CreateMap<User, UserModel>()
        .ReverseMap();
}

И дело в том, что это работает в некоторой степени, но комплексный тип Location не отображается должным образом. Я всегда могу сгладить это, включив LocationCity и LocationCountry в класс UserModel, но я не хочу этого делать. Я хочу, чтобы Location отображался как вложенное свойство в возвращаемом результате, как оно определено изначально. Как я могу добиться этого в AutoMapper?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Вам также необходимо добавить сопоставление между местоположением и местоположением. Да, источник и пункт назначения идентичны.

Итак, ваш профиль отображения должен выглядеть так:

public MappingProfile()
{
    CreateMap<Location, Location>();
    CreateMap<User, UserModel>()
        .ReverseMap();
}
0 голосов
/ 04 мая 2018

Вы можете определить свою конфигурацию так:

 CreateMap<User, UserModel>()
     .ForMember(um => um.Location , opt => opt.MapFrom(u => u.Location))
     .ReverseMap();

ReverseMap может создать только простое сопоставление. Для любого сложного типа вам нужно настроить его вручную, потому что AutoMaper точно не знает, как создать экземпляр свойства Location, и он вернет ссылку null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...