Dev (Back & Front)ARTIGO

Curso Entity Framework – Deletando uma entidade no cenário desconectado

Nesta aula do curso de Entity Framework, vou mostrar como deletar uma entidade no cenário desconectado que exclui uma linha na tabela do banco de dados.

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

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.

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

Nesta aula, vamos deletar uma 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 deletar uma entidade no cenário desconectado.

Vamos usar também o projeto criado na aula 20 – Entity Framework – Atualizando uma entidade no cenário desconectado – dessa forma, já teremos todas as referências feitas.

Deletando uma entidade Aluno

Iremos seguir o mesmo caminho da aula anterior, localizando um aluno no banco de dados pelo nome e, a seguir, usar o método Entry() para marcar a entidade que foi deletada fora do contexto como deletada (Deleted).

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 exclusão de uma entidade Aluno:

static void DeletandoEntidadeSimples()
 {
            Aluno _alunoAExcluir;
            //1. Pega um aluno do banco de dados pelo nome
            using (var ctx = new EscolaDBEntities())
            {
                _alunoAExcluir = ctx.Alunos.Where(a => a.AlunoNome == "Bianca").FirstOrDefault<Aluno>();
            }

            //cria um novo contexto para um cenárioi desconectado
            using (var novoContexto = new EscolaDBEntities())
            {
                //marca a entidade como deletada
                novoContexto.Entry(_alunoAExcluir).State = System.Data.Entity.EntityState.Deleted;
                //efetiva a exclusão e persiste no banco de dados
                novoContexto.SaveChanges();
            }  
 }

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

  • Pegamos um aluno existente com o nome Bianca a partir do banco de dados;
  • Marcamos a entidade, usando o método Entry() para obter o seu objeto DBEntityEntry, e então marcar o seu estado como Deleted;
  • Chamamos o método SaveChanges() para efetivar a exclusão da entidade 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 adicionar um grafo de entidade usando o DBContext no cenário desconectado.

é referência em Visual Basic no Brasil e autor dos livros "Aprenda Rápido: ASP" e "ASP, ADO e Banco de Dados na Internet". Mantenedor do site macoratti.net.

Ver perfil