Automapper:如何使用源类型的属性映射许多成员?

时间:2018-04-01 09:20:28

标签: c# automapper

if

我的目标是// source classes public class User { public string Id { get; set; } public string Name { get; set; } } public class UserStatus { public User User { get; set; } public int Status { get; set; } } // dest classes public class UserVM { public string Id { get; set; } public string Name { get; set; } } public class UserStatusVM : UserVM { public int Status { get; set; } } //Automapper configuration c.CreateMap<User, UserVM>(); c.CreateMap<UserStatus, UserStatusVM>() .ForMember(dest => dest.Status, opt => opt.MapFrom(source => source.Status)) .ForAllOtherMembers(opt => opt.ResolveUsing(source => Mapper.Map<User, UserVM>(source.User))); // error there 的所有成员(Status除外)已从UserStatusVM类的User属性进行映射,就像它映射UserStatus一样。

我怎样才能实现它?是Users -> UserVM等类似唯一的解决方案吗?

1 个答案:

答案 0 :(得分:1)

重命名UserVM的属性

public class UserVM 
{
    public string UserId { get; set; }
    public string UserName { get; set; }
}

UserIdUserName将按惯例>分别从UserStatus.User.IdUserStatus.User.Name映射。

注意

在映射时,Automapper发现UserVM.UserId类型不会退出UserStatus,因此会将UserId拆分为UserId(由CamelCase)和来自UserVM.UserId

的地图UserStatus.User.Id