自动映射器:“缺少类型映射配置或不支持的映射。”

时间:2019-12-03 13:13:11

标签: asp.net-core .net-core automapper

我有一个User和一个UserListDto。我正在尝试将User映射到UserListDto

但是我得到了,

  

缺少类型映射配置或不支持的映射。

当我致电GetUsers()而不是GetUser(int id)

时有效

UsersController:

    [HttpGet]
    public async Task<IActionResult> GetUsers()
    {
        var users = await _repo.GetUsers();

        var usersToReturn = _mapper.Map<IEnumerable<UserForListDto>>(users);

        return Ok(usersToReturn);
    }

    [HttpGet("{id}", Name = "GetUser")]
    public IActionResult GetUser(int id)
    {
        var user = _repo.GetUser(id, false);

        var userToReturn = _mapper.Map<UserForListDto>(user);

        return Ok(userToReturn);
    }

AutoMapperProfiles:

public class AutoMapperProfiles : Profile
{
    public AutoMapperProfiles()
    {
        CreateMap<User, UserForListDto>();
        CreateMap<User, UserForDetailedDto>();
        CreateMap<UserForRegisterDto, User>();
        CreateMap<HighScoreDto, HighScore>()
        .ForMember(h=>h.TimeBetweenClicksAverage, 
        m=>m.MapFrom(u=>u.TimeBetweenClicksArray.Average()));
        CreateMap<HighScore,HighScoreForReturnDto>();



    }
}

用户:

public class User : IdentityUser<int>
{
    public virtual ICollection<UserRole> UserRoles { get; set; }
    public virtual ICollection<HighScore> HighScores { get; set; }
}

UserForDetailedDto:

public class UserForDetailedDto
{
    public int Id { get; set; }
    public string Username { get; set; }
}

2 个答案:

答案 0 :(得分:1)

似乎有两个问题:1)您没有await拨打_repo.GetUser的电话,而2)您试图将单个User映射到{ {1}}。

确保先IEnumerable<UserForListDto>,然后再await _repo.GetUser

由于您不等待回购调用,因此它将尝试将类型_mapper.Map<UserForListDto>(user)映射到Task,这不是已配置的映射。

答案 1 :(得分:0)

您似乎正在尝试将单个User对象映射到IEnumerable集合。在您的GetUser(int id)方法中,尝试通过以下方式将其映射到单个UserForListDto对象:

_mapper.Map<UserForListDto>(user)