Stavo codificando una web API, volevo mappare il modello utente al modello UserView. Il debug conferma che mapper.Map (utente) restituisce oggetto valore null. mapper è un'istanza di IMapper Class di 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);
L'output è simile a questo.
{
"id": "00000000-0000-0000-0000-000000000000",
"name": null,
"email": null,
"role": null
}
Il modello UserView
ha solo getter. Se vuoi mantenerli in lettura, puoi fare quanto segue
Aggiungi un costruttore a 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;
}
}
Regola anche il profilo di mappatura
public class MappingProfiles : Profile
{
public MappingProfiles()
{
CreateMap<User, UserView>()
.ConstructUsing(src => new UserView(src.Id, src.Name, src.Email, src.UserRole));
}
}
Il modo più semplice sarebbe aggiungere setter a tutte le proprietà di UserView
.