繁体   English   中英

AutoMapper map 只需要字段

[英]AutoMapper map only needed fields

我使用 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>();

我 map ClubDTO class 到Club

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

如何设置仅映射Player.AgePlayer.Addres而不是所有字段所有类?

我相信您应该忽略您不想映射的任何属性,如下所示:

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

请注意,这应该在 automapper 配置期间完成,而不是在调用Map方法时完成。

你应该能够做这样的事情: _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
}
 public class PlayerDTO
    {
       
        public int Age { get; set; }
        public string Address { get; set; }
    }

    var onlyAgeAndAdress=_mapper.Map(Player, PlayerDTO);

你只会得到年龄和地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM