Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida HttpPut

Olá, fiquei com uma dúvida no seguinte código:

[HttpPut("{id}")]
public IActionResult AtualizaFilme(int id, [FromBody]UpdateFilmeDto filmeDto)
{
    var filme = _context.Filmes.FirstOrDefault(filme => filme.Id == id);
    if (filme == null) return NotFound();
    _mapper.Map(filmeDto, filme);
    _context.SaveChanges();
    return NoContent();
}

Ele funciona perfeitamente, porém não entendi como isso acontece. O objeto filme é passado para "var filme" quando iteramos utilizando FirstOrDefault no _context, em seguida utilizamos _mapper para mapear a DTO recebida pelo HttpPut para "var filme" e então, usamos _context.SaveChanges() para atualizar. Porém, se modificamos "filme" e não _context, como é possível que ele receba o valor que foi mapeado para "filme"?
1 resposta
solução!

Oi Augusto, tudo bem?

No .NET, usamos o Entity Framework, que é um tipo de ferramenta para lidar com bancos de dados. Ele tem uma função chamada "rastreamento" que monitora as informações que buscamos do banco de dados. Quando fazemos uma busca usando o Entity Framework, ele mantém um registro das coisas que trouxemos.

Isso significa que se fizermos alguma mudança nessas informações, o Entity Framework fica sabendo. Quando salvamos essas mudanças usando _context.SaveChanges();, o Entity Framework verifica o que foi modificado e cria os comandos necessários para atualizar o banco de dados.

No seu código, ao usar _mapper.Map(filmeDto, filme);, você está mudando as informações do objeto filme que foram rastreadas pelo Entity Framework. Então, ao chamar _context.SaveChanges();, o Entity Framework entende que precisa gerar um comando SQL UPDATE para atualizar essas informações no banco de dados.

Espero que tenha te ajudado.

Um abraço e bons estudos.