1
resposta

Dúvidas sobre o Mapper

Olá,

Estou com dúvidas no momento de usar o mapper

Pq em um momento usamos ele para retornar algo para o objeto film (Criação do Film)

 [HttpPost]
    public IActionResult AddFilm([FromBody]CreateFilmDto filmDto)
    {

        Film film = _mapper.Map<Film>(filmDto);
        _context.Films.Add(film);
        _context.SaveChanges();
        return CreatedAtAction(nameof(GetFilmsId),new { id = film.Id }, film);
    }

e no outro momento usamos ele para update sem nenhum retorno

  [HttpPut("{id}")]
    public IActionResult UpdateFilm(int id, [FromBody] UpdateFilmDto filmDto)
    {
        var film = _context.Films.FirstOrDefault(films => films.Id == id);
        if (film == null) return NotFound();
        _mapper.Map(filmDto, film);
        _context.SaveChanges();
        return NoContent();
    }

Queria entender a diferença que foi dada no uso deles nesses momentos.

E como ele se comporta diferente se no Profile eles estão mapeados da mesma forma?

public class FilmProfile : Profile
{
    public FilmProfile()
    {
        CreateMap<CreateFilmDto, Film>();
        CreateMap<UpdateFilmDto, Film>();
    }
}

Obrigado desde já ;)

1 resposta

O automapper funciona de várias formas, mas vou te explicar a diferença desses dois cenários que você levantou:

1 - Criação de objeto. Esse cenário é onde você só passa o DTO e o tipo desejado para o mapper, assim ele irá utilizar as propriedades da DTO para criar um objeto do tipo específicado entre <> e adicionar esses valores.

2 - Atualização de um objeto existente Onde você passa o objeto de entrada e o objeto de destino, ou seja, o DTO está trazendo informações novas e o objeto de destino é o seu filme que havia sido buscado do banco de dados, com isso, o mapper vai pegar as propriedades do DTO colocar o valor delas nas propriedades do filme que havia sido buscado do banco. Nota-se que logo após isso já é executado um save changes para persistir as alterações feitas nos objetos rastreados pelo DbContext.