Automapper for a nested list with one element ignored

I have below models, the user model has a list of roles.

public class User { public string Username { get; set; } public List<Role> Roles { get; set; } } public class Role { public Guid RoleID { get; set; } public string Name { get; set; } public string Value { get; set; } } public class UserSourceModel { public string Username { get; set; } public List<RoleSourceModel> Roles { get; set; } } public class RoleSourceModel { public string Name { get; set; } public string Value { get; set; } } 

Mapper:

  Mapper.CreateMap<UserSourceModel, User>(); Mapper.CreateMap<RoleSourceModel, Role>() .ForMember(dest => dest.RoleID, opt => opt.Ignore()); 

I do not want the RoleID to be displayed from the source code, so I mentioned ignore this and save the value from the destination.

Dummy data:

  //// data from UI UserSourceModel sourceData = new UserSourceModel { Username = "NewUser", Roles = new List<RoleSourceModel> { new RoleSourceModel { Name = "Admin", Value = "Admin" } } }; //// data in database User destinationData = new User { Username = "UserInDB", Roles = new List<Role> { new Role { RoleID = Guid.NewGuid(), Name = "Staff", Value = "Staff" } } }; 

Trial Matching:

 var userOutPut = Mapper.Map<UserSourceModel, User>(sourceData, destinationData); 

enter image description here

I expected RoleID to be a value that was already in the user model ( Guid.NewGuid() ), but I get an empty Guid ( 00000000-0000-0000-0000-000000000000 ).

+7
c # automapper
source share
2 answers

For me, they worked with List <> and UseDestinationValue ()

 Mapper.CreateMap<UserSourceModel, User>(); Mapper.CreateMap<List<RoleSourceModel>, List<Role>>(); Mapper.CreateMap<RoleSourceModel, Role>() .ForMember(dest => dest.RoleID, opt => opt.UseDestinationValue()); 
+7
source share

You need to add another card, I think.

  Mapper.CreateMap<UserSourceModel, User>(); Mapper.CreateMap<List<RoleSourceModel>,List<Role>>(); Mapper.CreateMap<RoleSourceModel, Role>() .ForMember(dest => dest.RoleID, o => o.Ignore()); 
+2
source share

All Articles