Curso Entity Framework - Atualizando uma entidade no cenário desconectado - XX


  Nesta aula vou mostrar como atualizar uma entidade no cenário desconectado que atualiza uma linha na tabela do banco de dados.(aula anterior)

Podemos usar 3 abordagens para realizar a tarefa de atualizar dados de uma entidade.

Se você desejar usar a abordagem DataBase-First então pode criar um Entity Data Model para o banco de dados EscolaDB.mdf definido na aula 2 : Entity Framework - Configurando o Ambiente - II

Se você usar a abordagem Code-First ou Model-First então deverá criar as entidades e classes de contexto com base no mesmo banco de dados.

Nesta aula vamos atualizar a entidade Aluno que foi definida com o seguinte código:

namespace EF6_EscolaDB
{
    using System;
    using System.Collections.Generic;    
    public partial class Aluno
    {
        public Aluno()
        {
            this.Cursos = new HashSet<Curso>();
        }    
        public int AlunoId { get; set; }
        public string AlunoNome { get; set; }
        public int PadraoId { get; set; }
        public virtual Padrao Padrao { get; set; }
        public virtual AlunoEndereco AlunoEndereco { get; set; }
        public virtual ICollection<Curso> Cursos { get; set; }
    }
}

A seguir temos o código da classe de Contexto :

namespace EF6_EscolaDB
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class EscolaDBEntities : DbContext
    {
        public EscolaDBEntities()
            : base("name=EscolaDBEntities")
        {
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
        public virtual DbSet<Aluno> Alunos { get; set; }
        public virtual DbSet<AlunoEndereco> AlunoEnderecos { get; set; }
        public virtual DbSet<Curso> Cursos { get; set; }
        public virtual DbSet<Padrao> Padraos { get; set; }
        public virtual DbSet<Professor> Professores { get; set; }
    }
}


Preparando o ambiente

Vamos usar a solução criada na aula 11 - Entity Framework - Consultas Projeção - EF6_EscolaDB - para mostrar como atualizar uma entidade no cenário desconectado.

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_AtualizaEntidades :

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.

Atualizando uma entidade Aluno

Neste exemplo usamos o método Entry() para marcar a entidade que foi modificada fora do contexto como modificada (Modified).

Para persistir os dados no banco de dados usamos o método SaveChanges().

Nota : O método Entry obtém um objeto DbEntityEntry para a entidade fornecendo o acesso às informações sobre a entidade e a capacidade de executar ações na entidade.

A seguir código usado para realizar a atualização de uma entidade Aluno :

 static void AtualizandoEntidadeSimples()
  {
            Aluno _aluno;
            //1. Pega o aluno do DB
            using (var ctx = new EscolaDBEntities())
            {
                _aluno = ctx.Alunos.Where(a => a.AlunoNome == "Macoratti").FirstOrDefault<Aluno>();
            }
            //2. Altera o nome do aluno no modo desconectado (fora do escopo do contexto ctx)
            if (_aluno != null)
            {
                _aluno.AlunoNome = "Macoratti Atualizado";
            }
            //salva a entidade modificada usando o novo contexto
            using (var dbCtx = new EscolaDBEntities())
            {
                //3. Marca a entidade como modificada
                dbCtx.Entry(_aluno).State = System.Data.Entity.EntityState.Modified;
                //4. chama o método SaveChanges
                dbCtx.SaveChanges();
            }
  }

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

  1. Pegamos um aluno existente com o nome Macoratti a partir do banco de dados;
  2. Alteramos o nome do aluno fora do escopo do contexto (modo desconectado);
  3. Passamos a entidade modificada para o método Entry() para obter o seu objeto DBEntityEntry e então marcar o seu estado como Modified;
  4. Chamamos o método SaveChanges() para atualizar a informação do aluno no banco de dados;

O método DBContext.Entry retorna um instância de DBEntityEntry para uma entidade especificada e a classe DbEntityEntry fornece o acesso à informação sobre a entidade e seu estado.

Na próxima aula veremos como deletar uma entidade simples em um cenário desconectado no Entity Framework.
 

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