Olá pessoal, tudo bom?
Compartilho neste post um exemplo (ASP.NET + Class Library) que fiz para meus alunos onde temos uma situação de CRUD (insert, update, delete, select) em um relacionamento muitos para muitos usando Entity Framework – EF. Veja o modelo de dados abaixo:

No exemplo, simulo um formulário onde se pode inserir um item e ao mesmo tempo indicar quais as coleções relacionadas ao mesmo, por exemplo, posso cadastrar um item “Fusca” já indicando que ele pertence às coleções “Miniaturas”, “Veículos” e “Brinquedos”.
Assim como explicado para a operação de cadastro, também temos a mesma ideia para as ações de exclusão, alteração e consulta.
Para conhecer os detalhes do exemplo e também a codificação utilizada, faça o download da solução do Visual Studio que contempla o assunto que estamos tratando aqui.
Espero ajudar!
Grande abraço,
Eduardo Henrique Rizo
[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]
Olá Eduardo,
Nesse seu exemplo não existe, no modelo, um objeto “ColecoesItens” pois é feito apenas o relacionamento entre as duas tabelas. Mas e se existisse uma outra propriedade na tabela Colecoes_Itens, como por exemplo clc_ite_quantidade, nesse caso seria criada uma nova entidade no modelo, “ColecoesItens” e a entidade Colecoes teria um list de “ColecoesItens” e não de “Itens”, correto?
Agora pergunto, no momento de inserir uma nova Colecao, eu alimentando a list de ColecoesItens com objetos ColecoesItens informando a esse objeto apenas as propriedades ite_codigo e clc_ite_quantidade o EF vai atribuir automaticamente o valor da clc_codigo quando ela for criada? Pois no momento ela ainda não existe no banco.
Estou fazendo um projeto que na venda estou com esse problema, quando dou o SaveChanges dá o seguinte problema: As alterações no banco de dados foram confirmadas com êxito, mas ocorreu um erro ao atualizar o contexto do objeto. O ObjectContext pode estar em estado inconsistente. Mensagem de exceção interna: Ocorreu uma violação de restrição de integridade referencial: os valores de propriedade que definem as restrições referenciais não são consistentes entre objetos principais e dependentes na relação.
No caso, a Venda é gravada no banco, mas os produtos da venda não são gravados na tabela ProdutosVenda.
Se não utilizo o Attach dá certo, registra a venda e os produtos da venda, mas cadastra de novo os produtos.
Olá Diego, tudo bom?
1) Você está certo em suas colocações sobre a existência ou não da entidade “ColecoesItens” do meu exemplo.
2) Se você inserir uma nova “Colecao” com uma lista de “ColecoesItens” o EF irá inserir automaticamente também na tabela Colecoes_Itens.
3) Quanto a questão do Attach, será necessário que você o utilize pois senão fatalmente você terá duplicidades dos seus produtos. Devemos sempre lembrar que se o modelo conceitual do EF não conhecer um objeto, a tendência natural dele é tentar inserir no BD, por isso, nesse caso que você colocou o uso do Attach é fundamental.
Veja outro exemplos de attach no post abaixo:
https://www.eduardorizo.com.br/2013/11/25/exemplo-de-insercao-muitos-para-muitos-usando-ef5-class-library-linq-e-asp-net/
Abraços,
Eduardo H. Rizo