Entity Framework: Operações CRUD em situações de relacionamento muitos para muitos

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:

Modelo de Dados

Modelo de Dados onde observamos uma situação de relacionamento Muitos para Muitos

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.

diskettePara 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

Anúncios

Coordenador de Internet da Universidade do Oeste Paulista (Unoeste) e professor universitário de disciplinas relacionadas ao desenvolvimento de sistemas para Web, gerenciamento de servidores, serviços e redes.

Marcado com: , , , , , , , , , , , , , , , , , , , , ,
Publicado em ASP.NET, Desenvolvimento Web, Entity Framework, LINQ
2 comentários em “Entity Framework: Operações CRUD em situações de relacionamento muitos para muitos
  1. Diego disse:

    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://ehrizo.wordpress.com/2013/11/25/exemplo-de-insercao-muitos-para-muitos-usando-ef5-class-library-linq-e-asp-net/

      Abraços,
      Eduardo H. Rizo

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Sorocaba e Região
Prestadora de serviços RIZZO GS - Sorocaba/SP

Serviços de limpeza, conservação, recepção, copa, portaria, vigia, zeladoria, jardim, elétrica, hidráulica, pintura, etc.

Contato: (15) 3357-4263 / (15) 3357-4502 - contato@rizzogs.com.br

Website: http://www.rizzogs.com.br

%d blogueiros gostam disto: