2
respostas

[Bug] Erro 500

No meu ocorreu um erro ao criar uma sessao e não consigo entender o que aconteceu: Insira aqui a descrição dessa imagem para ajudar na acessibilidade A sessão FilmeId:1 e CinemaId:1 já estava criada. Insira aqui a descrição dessa imagem para ajudar na acessibilidadeMas estou tentando com outras combinaçãoes e gera o erro 500 e no Get do filme fica como vazio Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Obs.: Descobri que faltava um relacionamento. Gerei todas as migrations do zero para pegar a nova atualização, mas ainda assim o erro persiste. No postman diz sobre esse "FilmeId1", não criei esse campo na tabela sessões, mas olhei na migration e parece que foi criada automaticamente:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade rodando mais um Update-Database é informado: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeJoguei este erro no ChatGpt, mas mesmo assim, não entendi como solucionar,já que meu Context não parece ter nada de errado:

public class FilmeContext : DbContext
{
    public FilmeContext(DbContextOptions<FilmeContext> opts) : base(opts) 
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Sessao>()
            .HasKey(sessao => new {sessao.FilmeId, 
                                    sessao.CinemaId});

        modelBuilder.Entity<Sessao>()
                .HasOne(sessao => sessao.Cinema)
                .WithMany(cinema => cinema.Sessoes)
                .HasForeignKey(sessao => sessao.CinemaId);

        modelBuilder.Entity<Sessao>()
           .HasOne(sessao => sessao.Cinema)
           .WithMany(filme => filme.Sessoes)
           .HasForeignKey(sessao => sessao.FilmeId);

        modelBuilder.Entity<Endereco>()
           .HasOne(endereco => endereco.Cinema)
           .WithOne(Cinema => Cinema.Endereco)
           .OnDelete(DeleteBehavior.Restrict);
    }

    public DbSet<Filme> Filmes { get; set; }
    public DbSet<Cinema> Cinemas { get; set; }
    public DbSet<Endereco> Enderecos { get; set; }
    public DbSet<Sessao> Sessoes { get; set; }
}

Olá

O erro 500 geralmente é um erro interno do servidor, o que indica que algo deu errado no lado do servidor (neste caso, provavelmente no seu código).

Vamos tentar resolver isso juntos. O erro pode estar ocorrendo devido a várias razões, mas de acordo com o contexto da aula, uma possibilidade é que você esteja tentando criar uma sessão com uma combinação de FilmeId e CinemaId que já existe, o que violaria a restrição de chave primária composta que definimos para a entidade Sessão.

No código da aula, definimos que a chave primária da tabela Sessão é composta pelos campos FilmeId e CinemaId:

builder.Entity<Sessao>()
    .HasKey(sessao => new { sessao.FilmeId, sessao.CinemaId });

Isso significa que cada combinação de FilmeId e CinemaId deve ser única. Se você tentar inserir uma nova sessão com uma combinação de FilmeId e CinemaId que já existe na tabela Sessão, o Entity Framework irá lançar um erro.

Aqui está um exemplo prático do que pode estar acontecendo:

  1. Você cria uma sessão com FilmeId: 1 e CinemaId: 1. Isso é inserido com sucesso no banco de dados.
  2. Você tenta criar outra sessão com FilmeId: 1 e CinemaId: 1 novamente. Como essa combinação já existe no banco de dados, o Entity Framework lança um erro.

Para resolver esse problema, você deve garantir que cada sessão que você tenta criar tem uma combinação única de FilmeId e CinemaId.

Espero ter ajudado e bons estudos!