3
respostas

Relacionamento N : N

Boa noite,

Tenho duas dúvida:

Dúvida 1: A tabela criada "FilmeAtor" teve seus registros populados diretamente no banco de dados? Pois não vi a parte onde faz a inserção de relacionamento de ator com filme.

Dúvida 2: No caso se é válido ou não criar um DbSet para as classes de relacionamentos, acredito que somente seja válido a criação do DbSet em um relacionamento" N:N" correto? Pois como via aplicação vou fazer a inserção dos registros desses relacionamentos sem um DbSet da tabela de join?

OBS: Excelente curso, didática perfeita :)

3 respostas

Olá Bruno,

a tabela no banco e os registros usados na aula já foram criados automaticamente por aquele script da aula 1 deste curso. O alurafilmes-estrutura.sql e o alurafilmes-cargaInicial.sql serviam para isso, criar as tabelas e já popular.

No caso do DbSet para a tabela intermediária, foi necessário criar a classe FilmeAtor e mapeá-la no contexto justamente por justamente ser um n:n em que temos a tabela intermediaria film_actor no banco legado. Só que segundo a própria documentação da microsoft, relacionamentos do time n:n você precisa por enquanto pelo menos criar classe que representa a tabela intermediária e definir a relação no método OnModelCreating, mesmo não adicionando esta classe num DbSet.

Olá lucas.takeshi,

Vlw pelo retorno, sim eu entendi que por enquanto é necessário criar a classe que representa o relacionamento, o que não ficou claro é como que sem essa classe eu iria inserir no banco de dados o relacionando de filme com ator.

pois para mim precisa de algo do tipo:

filmeAtor.FilmeId = 1;
filmeAtor.AtorId = 2;

_contexto.FilmeAtor.add(filmeAtor)

Como que sem mapear no contexto vou inserir o relacionamento no banco?

Então, pelo menos no código do curso esse mapeamento foi feito assim:

public DbSet<FilmeAtor> Elenco { get; set; }

Então você até consegue trabalhar com ele pelo contexto, mas chamando como contexto.Elenco.

Outra opção para manter mais o paradigma de orientação a objetos, ao invés de lidar com a tabela intermediária que é mais de banco de dados relacional, outra opção para fazer o cadastro é justamente trabalhar com as classes Filme e Ator. Você pode pegar um filme e adicionar um FilmeAtor nele:

Filme filme = //algum filme
Ator ator = //algum ator
filme.Atores.Add(new FilmeAtor() { Ator = ator } );

Ai só precisaria cadastrar esse filme que ele vai incluir na tabela intermediária os valores corretos do relacionamento.