Je codais une API Web, je voulais mapper le modèle utilisateur au modèle UserView. Le débogage confirme mapper.Map (utilisateur) renvoie un objet de valeur null. Le mappeur est une instance de la classe IMapper de AutoMapper.
public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public UserRole? Role { get; set; }
}
public class UserView
{
public Guid Id { get; }
public string Name { get; }
public string Email { get; }
public UserRole? Role { get; }
}
public class MappingProfiles : Profile
{
public MappingProfiles()
{
CreateMap<User, UserView>();
}
}
//In startup.cs
services.AddAutoMapper();
//In user service class.
var userView = _mapper.Map<UserView>(user);
La sortie ressemble à ceci.
{
"id": "00000000-0000-0000-0000-000000000000",
"name": null,
"email": null,
"role": null
}
Le modèle UserView
n'a que des UserView
. Si vous voulez les garder en lecture seule, vous pouvez faire ce qui suit
Ajouter un constructeur à UserView
public class UserView
{
public Guid Id { get; }
public string Name{ get; }
public string Email { get; }
public UserRole? Role { get; }
public UserView(Guid id, string name, string email, UserRole role)
{
Id = id;
Name = name;
Email = email;
Role = role;
}
}
Ajustez également le profil de mappage
public class MappingProfiles : Profile
{
public MappingProfiles()
{
CreateMap<User, UserView>()
.ConstructUsing(src => new UserView(src.Id, src.Name, src.Email, src.UserRole));
}
}
Le moyen le plus simple consiste à ajouter des UserView
à toutes les propriétés de UserView
.