Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Podemos criar um Context para cada entidade ou uma pra todas?

https://cursos.alura.com.br/forum/topico-duvida-pq-o-dbset-de-cinema-foi-criado-dentro-do-filmecontext-309951

Eu não entendi diteiro a explicação sobre o Context de Cinema ter sido criado em FilmeContext.

Seria por conta do relacional?

Meio que como o cinema só existe se tiver filmes, faz sentido que cinema esteja em filme. Seria por esse caminho ou eu estou viajando nas ideias?

4 respostas

Olá, Igor.

Tudo bem?

No Entity Framework, o DbContext é uma classe que gerencia a conexão com o banco de dados e o mapeamento das entidades para as tabelas do banco. Em um projeto, é comum ter um único DbContext que gerencia todas as entidades relacionadas, especialmente quando elas têm algum tipo de relacionamento entre si.

No seu caso, como estamos lidando com filmes e cinemas, faz sentido que ambos estejam no mesmo DbContext (FilmeContext). Isso porque, em um cenário real, essas entidades provavelmente terão algum tipo de relacionamento, como um cinema exibindo vários filmes. Ter todas as entidades relacionadas no mesmo DbContext facilita o gerenciamento desses relacionamentos e a execução de consultas que envolvem múltiplas entidades.

Exemplo Prático

Imagine que você tem um cinema que exibe vários filmes. Você pode ter uma classe Cinema e uma classe Filme, e um relacionamento de um-para-muitos entre elas (um cinema pode exibir muitos filmes). Se você tivesse Cinema e Filme em DbContexts separados, seria muito mais complicado gerenciar e consultar esses dados de forma eficiente.

Aqui está um exemplo de como isso pode ser configurado:

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

    public DbSet<Filme> Filmes { get; set; }
    public DbSet<Cinema> Cinemas { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Cinema>()
            .HasMany(c => c.Filmes)
            .WithOne(f => f.Cinema)
            .HasForeignKey(f => f.CinemaId);
    }
}

public class Cinema
{
    [Key]
    [Required]
    public int Id { get; set; }
    [Required(ErrorMessage = "O campo de nome é obrigatório.")]
    public string Nome { get; set; }
    public ICollection<Filme> Filmes { get; set; }
}

public class Filme
{
    [Key]
    [Required]
    public int Id { get; set; }
    [Required]
    public string Titulo { get; set; }
    public int CinemaId { get; set; }
    public Cinema Cinema { get; set; }
}

Neste exemplo, o FilmeContext gerencia tanto os cinemas quanto os filmes e define o relacionamento entre eles. Isso torna mais fácil fazer consultas como "Quais filmes estão sendo exibidos em um determinado cinema?" ou "Em quais cinemas um determinado filme está sendo exibido?".

Espero ter ajudado e bons estudos!

Renan muito obrigado pela explicação.

Mas ainda ficou uma dúvida, como eu atribuo o nome para o Context?

Ex:

FilmeContext BibliotecaContext LojaContext UsuarioContext . . .

solução!

Olá, Igor.

A escolha do nome do seu DbContext é mais uma questão de convenção e clareza do que uma regra. O nome deve refletir o propósito ou o escopo das entidades que ele gerencia. Se seu DbContext gerencia filmes, cinemas e outras entidades relacionadas a um sistema de cinema, "FilmeContext" é um nome adequado. Aqui estão algumas dicas para ajudar na escolha do nome do seu DbContext:

  • O nome deve indicar claramente o que o contexto gerencia. Se você tiver um contexto específico para uma área funcional, nomeie-o de acordo com essa área.

  • Mantenha uma convenção de nomenclatura consistente em todo o seu projeto para facilitar a compreensão e manutenção do código.

  • Se o seu DbContext gerencia múltiplas entidades relacionadas, escolha um nome que abranja todas elas de maneira coesa.

Aqui estão alguns exemplos:

  • FilmeContext: Se gerencia entidades relacionadas a um sistema de cinema (Filme, Cinema, Diretor, etc.).
  • BibliotecaContext: Se gerencia entidades relacionadas a uma biblioteca (Livro, Autor, Categoria, etc.).
  • LojaContext: Se gerencia entidades relacionadas a uma loja (Produto, Cliente, Pedido, etc.).
  • UsuarioContext: Se gerencia entidades relacionadas a usuários (Usuario, Perfil, Permissão, etc.).

Espero que isso esclareça suas dúvidas sobre como nomear seus DbContexts! Se precisar de mais alguma coisa, estou à disposição. Bons estudos!

Ajudou muito! Obrigado!