Curso Entity Framework - Adicionando um grafo de entidade usando o DBContext no modo desconectado - XXII


  Nesta aula vou mostrar como adicionar um grafo de entidades (um conjunto de entidades ou objetos) no cenário desconectado usando o DBContext. (aula anterior)

Quando temos mais de uma entidade envolvida em um processo de atualização ou persistência temos o que é conhecido como grafo de entidades ou objetos.

Como exemplo podemos citar uma operação de um carrinho de compras onde temos as entidades pedidos, detalhes dos pedidos, clientes e produtos envolvidas na transação.

Adicionar um grafo de entidades com todas as novas entidades não é uma tarefa complexa como pode parecer à primeira vista.

Para poder realizar essa operação podemos usar o método DbSet.Add() para anexar todo o grafo de entidades ao contexto e a seguir definir todos os estados das entidades como Added como já vimos na aula 18.

No exemplo desta aula vamos adicionar uma grafo de entidades Aluno no modo desconectado usando o método DbSet.Add() o qual marca o estado de todas as entidades como Added.

Preparando o ambiente

Vamos usar a solução criada na aula 11 - Entity Framework - Consultas Projeção - EF6_EscolaDB - para mostrar como para mostrar como adicionar um grafo de entidades.

Abra a solução EF6_EscolaDB e a seguir clique no menu FILE -> Add -> New Project;

Selecione a linguagem Visual C# e o template Console Application e informe o nome EF6_Adicionando_Grafo_Entidades :

A seguir inclua uma referência neste projeto ao projeto EF6_EscolaDB e atualize também o arquivo App.Config com a string de conexão para a entidade :

...
<
connectionStrings>
<
add name="EscolaDBEntities" connectionString="metadata=res://*/EscolaDB.csdl|res://*/EscolaDB.ssdl|res://*/EscolaDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;initial catalog=EscolaDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /></connectionStrings>
...

 Adicionando um grafo de entidades aluno

Abra o arquivo Program.cs e inclua o código abaixo neste arquivo:

using System;
using System.Linq;
using EF6_EscolaDB;
namespace EF6_Adicionado_Grafo_Entidades
{
    class Program
    {
        static void Main(string[] args)
        {
            //Cria um aluno no modo desconectado
            Aluno novoAluno = new Aluno() { AlunoNome = "Novo Aluno Aula 22" };
            //Atribui um novo padrão a nova entidade aluno
            novoAluno.Padrao = new Padrao() { PadraoNome = "Novo Padrao - Aula 22", Descricao = "Nova descricao do novo Padrao" };
            //adiciona um novo curso com um novo professor em aluno.cursos
            novoAluno.Cursos.Add(new Curso() { CursoNome = "Novo Curso para o aluno", Professor = new Professor() { ProfessorNome = "Novo Professor - Aula 22" } });
            using (var context = new EscolaDBEntities())
            {
                //adiciona o aluno ao contexto
                context.Alunos.Add(novoAluno);
                //persiste o grafo de entidades
                context.SaveChanges();
                //exibe os resultados 
                Console.WriteLine("Uma entidade aluno (novoAluno) foi adiciona com um AlunoId  =  " + novoAluno.AlunoId.ToString());
                Console.WriteLine("Uma nova entidade Padrao foi adicionada com PadraoId         =  " + novoAluno.PadraoId.ToString());
                Console.WriteLine("Uma nova entidade Curso foi adicionada com CursoId             =  " + novoAluno.Cursos.ElementAt(0).CursoId.ToString());
                Console.WriteLine("Uma nova entidade Professor foi adicionada com ProfessorId   =  " + novoAluno.Cursos.ElementAt(0).ProfessorId.ToString());
                Console.ReadKey();
            }
        }
    }
}

A seguir temos a sequência das operações realizadas :

  1. Criamos uma nova entidade Aluno chamada novoAluno;
  2. Atribuímos um novo padrão à nova entidade;
  3. Adicionamos um novo curso com um novo professor ;
  4. Usamos o método Add() para adicionar a nova entidade ao contexto;
  5. Persistimos as alterações usando o método SaveChanges();

Executando o projeto iremos obter o seguinte resultado:

Dessa forma notamos que não existe diferença quando você adiciona uma entidade simples ou um grafo de entidades no cenário conectado ou desconectado.

Você deve apenas verificar se todas as entidades são novas e se os campos obrigatórios estão sendo criados.

Na próxima aula veremos como atualizar um grafo de entidades usando o DBContext no cenário desconectado.

Jesus respondeu, e disse-lhe: Porque te disse: Vi-te debaixo da figueira, crês ? Coisas maiores do que estas verás.
E disse-lhe: Na verdade, na verdade vos digo que daqui em diante vereis o céu aberto, e os anjos de Deus subindo e descendo sobre o Filho do homem.

João 1:50,51

 

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

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti