Карта Automapper во вложенный класс - PullRequest
15 голосов
/ 28 октября 2011

У меня есть 1 класс, который мне нужно сопоставить с несколькими классами, например.

Это источник, из которого я отображаю (модель представления):

public class UserBM
{
    public int UserId { get; set; }

    public string Address { get; set; }
    public string Address2 { get; set; }
    public string Address3 { get; set; }
    public string State { get; set; }

    public int CountryId { get; set; }
    public string Country { get; set; }
}

ЭтоВот как выглядит класс назначения (модель предметной области):

public abstract class User
{
    public int UserId { get; set; }

    public virtual Location Location { get; set; }
    public virtual int? LocationId { get; set; }
}

public class Location
{
    public int LocationId { get; set; }

    public string Address { get; set; }
    public string Address2 { get; set; }
    public string Address3 { get; set; }
    public string State { get; set; }

    public virtual int CountryId { get; set; }
    public virtual Country Country { get; set; }

}

Вот так выглядит моя карта создания автомашины:

Mapper.CreateMap<UserBM, User>();

Ответы [ 2 ]

25 голосов
/ 28 октября 2011

Определите два сопоставления, оба сопоставления из одного источника в разные места назначения. В сопоставлении User сопоставьте свойство Location вручную, используя Mapper.Map<UserBM, Location>(...)

Mapper.CreateMap<UserBM, Location>();
Mapper.CreateMap<UserBM, User>()
    .ForMember(dest => dest.Location, opt => 
         opt.MapFrom(src => Mapper.Map<UserBM, Location>(src));
0 голосов
/ 27 июня 2018

У меня есть другое решение.Основная идея заключается в том, что AutoMapper знает , как сглаживать вложенные объекты , когда вы правильно называете свойства в сглаженном объекте: добавляя имя свойства вложенного объекта в качестве префикса.Для вашего случая Местоположение является префиксом:

public class UserBM
{
    public int UserId { get; set; }

    public int LocationId { get; set; }
    public string LocationAddress { get; set; }
    public string LocationState { get; set; }
    public string LocationCountry { get; set; }
    ...
}

Таким образом, создание знакомого сопоставления из вложенного в плоское и , а затем использование метода ReverseMap позволяет AutomMapper понять, как разблокировать вложенный объект .

CreateMap<UserBM, User>()
   .ReverseMap();

Вот и все!

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