1
resposta

Erro no método Post

Quando tento usar o método post "AdicionarFilme", recebo o erro 500.

Notei que esse erro só ocorre quando incluo a linha _context.SaveChanges(); , conforme explicado na aula . Teria alguma alternativa para o _context.SaveChanges() ?

Abaixo, segue o meu código para ficar mais claro:

using FilmesAPI.Data;
using FilmesAPI.Models;
using Microsoft.AspNetCore.Mvc;

namespace FilmesAPI.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class FilmeController : ControllerBase

    {
        private FilmeContext _context;

        public FilmeController(FilmeContext context)
        {
            _context = context;
        }

        [HttpPost]

        public IActionResult AdicionarFilme([FromBody] Filme filme)
        {
            _context.Filmes.Add(filme);
            _context.SaveChanges();
            return CreatedAtAction(nameof(RecuperarFilmesPorId), new { id = filme.id }, filme);

        }

        [HttpGet]

        public IEnumerable<Filme> RecuperarFilmes()
        {
            return _context.Filmes;
        }

        [HttpGet("{id}")]
        public IActionResult RecuperarFilmesPorId(int id)
        {
            //Filme filme = filmes.FirstOrDefault(filme => filme.id == id);
            Filme filme = _context.Filmes.FirstOrDefault(filme => filme.id == id);
            if (filme != null)
            {
                return Ok(filme);
            }
            return NotFound();

        } 

    }
}
1 resposta

Olá, Danielle

Pelo código que você compartilhou, parece que você está enfrentando um erro 500 ao tentar usar o método POST "AdicionarFilme" e incluir a linha _context.SaveChanges(). Esse erro geralmente ocorre quando há um problema ao salvar as alterações no banco de dados.

Uma alternativa para o _context.SaveChanges() é utilizar o método SaveChangesAsync(). Esse método realiza a mesma função, porém de forma assíncrona, o que pode melhorar o desempenho da sua aplicação. Para utilizá-lo, substitua a linha _context.SaveChanges() por await _context.SaveChangesAsync().

Segue abaixo o trecho do código atualizado:

[HttpPost]
public async Task<IActionResult> AdicionarFilme([FromBody] Filme filme)
{
    _context.Filmes.Add(filme);
    await _context.SaveChangesAsync();
    return CreatedAtAction(nameof(RecuperarFilmesPorId), new { id = filme.id }, filme);
}

Dessa forma, o método AdicionarFilme irá salvar as alterações de forma assíncrona no banco de dados.

Espero ter ajudado e bons estudos!