I have two models and one view model.
Model:
public User
{
public string UserName { get; set; }
public int RoleId { get; set; }
}
public Role
{
public int RoleId { get; set; }
public string Name { get; set; }
}
ViewModel:
public UserIndex
{
public string UserName { get; set; }
public string RoleName { get; set; }
}
I tried to add config:
public class Role_User_UserIndex : Profile
{
public Role_User_UserIndex()
{
CreateMap<User, UserIndex>();
CreateMap<Role, UserIndex>()
.ForMember(des => des.RoleName, opt => opt.MapFrom(src => src.Name));
CreateMap<UserIndex, UserIndex>()
.ForMember(des => des.RoleName, opt => opt.MapFrom(src => src.RoleName))
.ForAllMembers(o => o.Condition((source, destination, member) => member != null));
}
}
and controller:
var mapper = new MapperConfiguration(cfg =>cfg.AddProfile<AutoMapperConfig.Role_User_UserIndex>()).CreateMapper();
var roles = db.Roles;
var users = db.Users;
var viewMode1 = mapper.Map<List<UserIndex>>(users);
var viewMode2 = mapper.Map<List<UserIndex>>(roles);
var indexViewModel= mapper.Map(viewModel, viewMode2);
The viewMode1 has 10 users, and the viewMode2 has 3 roles.
However, the merged result indexViewModel has 10 rows data, but the RoleName is null.
If I swap viewModel with viewMode2, indexViewModel has 3 rows data and UserName is null.
I also tried to remove ".ForAllMembers(o => o.Condition((source, destination, member) => member != null));" , but still not working.
How can I map RoleName
to indexViewModel
?
My AutoMapper version is 9.0.0
.
Thanks!