Estaba codificando una API web, quería asignar el modelo de usuario al modelo UserView. La depuración confirma que mapper.Map (usuario) devuelve un objeto de valor nulo. mapper es una instancia de IMapper Class of 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 salida se ve así.
{
"id": "00000000-0000-0000-0000-000000000000",
"name": null,
"email": null,
"role": null
}
El modelo UserView
solo tiene captadores. Si desea mantenerlos en modo de solo lectura, puede hacer lo siguiente
Añadir un constructor 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;
}
}
También ajustar el perfil de mapeo
public class MappingProfiles : Profile
{
public MappingProfiles()
{
CreateMap<User, UserView>()
.ConstructUsing(src => new UserView(src.Id, src.Name, src.Email, src.UserRole));
}
}
La forma más sencilla sería agregar agregadores a todas las propiedades de UserView
.