Reputation: 2201
// 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
My target is all members (excluding Status
one) of UserStatusVM
were mapped from User
property of UserStatus
class just as if it's mapping Users -> UserVM
.
How can I achieve it? Is something like ForMember(dest => dest.Id, opt => opt.MapFrom(source => source.User.Id))
etc. the only solution?
Upvotes: 0
Views: 53
Reputation: 8308
Rename UserVM
's properties
public class UserVM
{
public string UserId { get; set; }
public string UserName { get; set; }
}
UserId
and UserName
will be mapped by convention from UserStatus.User.Id
and UserStatus.User.Name
respectively.
Note
While mapping, Automapper sees that UserVM.UserId
does not exits on UserStatus
type, so it splits UserId
into User
and Id
(by CamelCase) and maps UserVM.UserId
from UserStatus.User.Id
Upvotes: 1