AutoMapper map только необходимые поля - PullRequest
1 голос
/ 28 февраля 2020

Я использую AutoMapper для отображения классов. Я борюсь с синтаксисом Automapper. У меня есть доменные классы:

        public class Club
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public DateTime OpenDate { get; set; }
            public IEnumerable<Team> Teams { get; set; }
        }

        public class Team
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Department { get; set; }
            public IEnumerable<Player> Players { get; set; }
        }

        public class Player
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Surname { get; set; }
            public int Age { get; set; }
            public string Address { get; set; }
        }

Также у меня есть классы dto:

        public class ClubDTO
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public DateTime OpenDate { get; set; }
            public IEnumerable<Team> TeamsDTO { get; set; }
        }

        public class TeamDTO
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Department { get; set; }
            public IEnumerable<Player> PlayersDTO { get; set; }
        }

        public class PlayerDTO
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Surname { get; set; }
            public int Age { get; set; }
            public string Address { get; set; }
        }

У меня есть настройки отображения из классов DTO в классах домена:

CreateMap<PlayerDTO, Player>();
CreateMap<TeamDTO, Team>();
CreateMap<ClubDTO, Club>();

I сопоставить ClubDTO класс с Club:

...
 _mapper.Map(clubDto, club);
...

Как настроить отображение только Player.Age и Player.Addres вместо всех полей всех классов?

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Я считаю, что вы должны игнорировать любые свойства, которые вы не хотели бы отображать, например:

CreateMap<PlayerDTO, Player>();
    .ForMember(x => x.Id, x => x.Ignore())
    .ForMember(x => x.Name, x => x.Ignore());
    .ForMember(x => x.Surname , x => x.Ignore());

Обратите внимание, что это должно быть сделано во время настройки автопостановщика, а не при вызове Map способ.

0 голосов
/ 28 февраля 2020

Вы должны быть в состоянии сделать что-то вроде этого: _mapper.Map(from, to).ForMember(x => x.MyProperty, opt => opt.Ignore());

Я бы также предложил использовать View Models. Это очень помогает с AutoMapper Например:

public class Player
{
     public int Id { get; set; }
     public string Name { get; set; }
     public string Surname { get; set; }
     public int Age { get; set; }
     public string Address { get; set; }
}

public class PlayerViewModel
{
     public int Id{get; set;
     //more fields that you can use in your views
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...