// 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
我的目标是UserStatusVM
的所有成员(不包括Status
一个)都是从UserStatus
类User
属性映射的,就好像它正在映射Users -> UserVM
一样。
我怎样才能实现它?像ForMember(dest => dest.Id, opt => opt.MapFrom(source => source.User.Id))
这样的东西是唯一的解决方案吗?
重命名UserVM
的属性
public class UserVM
{
public string UserId { get; set; }
public string UserName { get; set; }
}
UserId
和UserName
将分别按照惯例从UserStatus.User.Id
和UserStatus.User.Name
进行映射。
注意
映射时,Automapper 发现UserVM.UserId
不会在UserStatus
类型上退出,因此它会UserId
拆分为User
和Id
(通过 CamelCase),并从UserStatus.User.Id
映射UserVM.UserId