1
resposta

Categorias nulas

Ao final da aula 5 terminado de mapear as tabelas de category e filme_category. Executei o código abaixo:

using (var context = new CineAluraContext())
            {
                var query = context.Categorias
                    .Include(c => c.Filmes)
                    .ThenInclude(f => f.Categoria)
                    .First();

                Console.WriteLine("Categoria {0}", query);
                Console.WriteLine("filmes:");
                foreach (var q in query.Filmes)
                {
                    Console.WriteLine("\t-{0}", q.Filme);
                }
            }

Porém a saída no console está sendo null, ou seja, não me mostra o nome dos filmes da categoria.

1 resposta
public class CineAluraContext : DbContext
    {
        public DbSet<Ator> Atores { get; set; }
        public DbSet<Filme> Filmes { get; set; }
        public DbSet<FilmeAtor> Elenco { get; set; }
        public DbSet<Categoria> Categorias { get; set; }
        public DbSet<FilmeCategoria> FilmeCategorias { get; set; }

        public CineAluraContext()
        {
        }

        public CineAluraContext(DbContextOptions<CineAluraContext> options) : base(options)
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);

            optionsBuilder.UseSqlServer(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=AluraFilmes;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.ApplyConfiguration(new AtorConfiguration());
            modelBuilder.ApplyConfiguration(new FilmeConfiguration());
            modelBuilder.ApplyConfiguration(new FilmeAtorConfiguration());
            modelBuilder.ApplyConfiguration(new CategoriaConfiguration());
            modelBuilder.ApplyConfiguration(new FilmeCategoriaConfiguration());
        }
    }
public class FilmeCategoriaConfiguration : IEntityTypeConfiguration<FilmeCategoria>
    {
        public void Configure(EntityTypeBuilder<FilmeCategoria> builder)
        {
            builder.ToTable("film_category");
            builder.Property<int>("film_id");
            builder.Property<byte>("category_id");
            builder.HasKey("film_id", "category_id");
            builder.Property<DateTime>("last_update").HasColumnType("datime").HasDefaultValueSql("getdate()");
            builder.HasOne(fc => fc.Filme).WithMany(f => f.Categorias).HasForeignKey("film_id");
            builder.HasOne(fc => fc.Categoria).WithMany(c => c.Filmes).HasForeignKey("category_id");
        }
    }
public class CategoriaConfiguration : IEntityTypeConfiguration<Categoria>
    {
        public void Configure(EntityTypeBuilder<Categoria> builder)
        {
            builder.ToTable("category");
            builder.Property(c => c.Id).HasColumnName("category_id");
            builder.Property(c => c.Nome).HasColumnName("name").HasColumnType("varchar(25)").IsRequired();
            builder.Property<DateTime>("last_update").HasColumnType("datetime").HasDefaultValueSql("getdate()");
        }
    }
public class Categoria
    {
        public Categoria()
        {
            Filmes = new List<FilmeCategoria>();
        }

        public byte Id { get; set; }
        public string Nome { get; set; }
        public IList<FilmeCategoria> Filmes { get; set; }

        public override string ToString()
        {
            return $"{Nome}";
        }
    }
public class Filme
    {
        public Filme()
        {
            Elenco = new List<FilmeAtor>();
            Categorias = new List<FilmeCategoria>();
        }

        public int Id { get; set; }
        public string Titulo { get; set; }
        public string Descricao { get; set; }
        public string AnoLancamento { get; set; }
        public short Duracao { get; set; }
        public IList<FilmeAtor> Elenco { get; set; }
        public IList<FilmeCategoria> Categorias { get; set; }

        public override string ToString()
        {
            return $"{Titulo} - {AnoLancamento}\n";
        }
    }
public class FilmeCategoria
    {
        public Filme Filme { get; set; }
        public Categoria Categoria { get; set; }
    }