EF Core - Definindo e atualizando o relacionamento muitos-para-muitos - II


Hoje como definir e atualizar o relacionamento muitos-para-muitos usando o EF Core.

Continuando a primeira parte do artigo vamos incluir e atualizar dados em um relacionamento muitos para muitos.

No primeira parte do artigo definimos as entidades e usando o EF Core definimos o relacionamento muitos-para-muitos entre as tabelas Livros e Autores, onde um livro pode ter muitos autores e um autor pode ter muitos livros. A figura a seguir descreve o relacionamento definido:

Vamos agora usar o projeto já criado para incluir e atualizar dados neste contexto.

Incluindo dados

O código para incluir dados neste tipo de relacionamento no EF Core é mais simples do que no EF 6.

No arquivo Program.cs inclua o código a seguir no método Main() e defina o método IncluirDados():

using System;
using System.Collections.Generic;
namespace EFCore_Muitos_Muitos
{
    class Program
    {
        static void Main(string[] args)
        {
            IncluirDados();
        }
        private static void IncluirDados()
        {
            using (var context = new AppDbContext())
            { 
                var livro = new Livro
                {
                    Titulo = "Criando aplicações Mobile",
                    Lancamento = new DateTime(2017, 1, 1),
                    ISBN = "978-3-16-148410-0",
                    Preco = 220
                };
                var autor = new Autor { Nome = "Gerald", SobreNome="Versalious", Pais= "EUA" };
                livro.LivrosAutores = new List<LivroAutor>
                {
                  new LivroAutor {
                    Autor = autor,
                    Livro = livro,
                  }
                };
                //Inclui o livro e seus relacionamentos
                context.Livros.Add(livro);
                context.SaveChanges();
            }
        }
    }
}

Criamos uma instância da classe AppDbContext e a seguir incluimos um livro, um autor e atualizamos a tabela LivrosAutores; ao final incluimos o livro e persistimos os dados usando o método SaveChanges().

Vamos incluir mais um livro e um autor usando o livro : "UML Essential" de Martin Fowler. 

Após as inclusões, abrindo o banco de dados DemoDB no SQL Server veremos os dados de cada tabela conforme abaixo:

Percebemos que é relativamente simples incluir dados neste relacionamento usando o EF Core.

Atualizando dados

Para atualizar dados vamos criar um método AtualizarDados() com o seguinte código :

        private static void AtualizarDados()
        {
            using (var context = new AppDbContext())
            {
                //Localiza o livro a atualizar
                var livro = context.Livros
                    .Include(p => p.LivrosAutores)
                    .Single(p => p.Titulo == "Criando aplicações Mobile");
               //localiza o autor a ser usado           
               var novoAutor = context.Autores.Single(p => p.Nome == "Martin");

               //inclui um novo autor para o livro selecionado              
                livro.LivrosAutores.Add(new LivroAutor
                {
                    Livro = livro,
                    Autor = novoAutor,
                });
                context.SaveChanges();
            }
        }

No código estamos atualizando as informações dos autores para o livro 'Criando aplicações Mobile', incluindo o autor 'Martin Fowler'.

Agora para poder exibir os dados dos livros e autores existentes nas tabelas vamos criar o método ExibeDados():

3- ExibeDados

        private static void ExibeDados(AppDbContext context)
        {
            Console.WriteLine($"Livros e Autores");
            var livros = context.Livros
                            .Include(e => e.LivrosAutores)
                            .ThenInclude(e => e.Autor)
                           .ToList();
            foreach (var livro in livros)
            {
                Console.WriteLine($"  Livro {livro.Titulo}");
                foreach (var autor in livro.LivrosAutores.Select(e => e.Autor))
                {
                    Console.WriteLine($"    autor: {autor.Nome} {autor.SobreNome}");
                }
            }
            Console.WriteLine();
        }

No código acima, definimos uma consulta onde usamos o método include para incluir os dados relacionados da entidade LivrosAutores e a seguir usamos o método ThenInclude para fazer uma busca detalhada e incluir os dados relacionados dos autores.

A seguir percorremos os livros e seus autores exibindo o resultado no console:



Assim tratar o relacionamento muitos para muitos no EF Core não é tão complicado assim para cenários mais siimples.

Pegue o código usado no projeto aqui: EFCore_Muitos_Muitos_2.zip

"E esta é a mensagem que dele(Jesus) ouvimos, e vos anunciamos: que Deus é luz, e não há nele trevas nenhumas."
1 João 1:5

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

Referências:


José Carlos Macoratti