Exclusão do núcleo EF

Resumo : neste tutorial, você aprenderá como excluir dados das tabelas do banco de dados no EF Core.

Configurando um projeto de exemplo

Primeiro, baixe o projeto de exemplo de RH:

Baixe o projeto de amostra do EF Core HR

Segundo, execute o Add-Migrationcomando no Package Manager Console (PMC) para criar uma nova migração:

Add-Migration InitialLinguagem de código:  C#  ( cs )

Terceiro, execute o Update-Databasecomando no PMC para criar um novo banco de dados e tabelas de RH no SQL Server local:

Update-DatabaseLinguagem de código:  C#  ( cs )

Execute uma exclusão simples

Trabalharemos com Departments& Employeestabelas:

O seguinte insere um novo departamento na Departmentstabela:

using HR;

using var context = new HRContext();

var department = new Department() { Name = "Logistics" };
context.Departments.Add(department);

context.SaveChanges();Linguagem de código:  C#  ( cs )

A Departmentstabela conterá uma linha com Id 1:

Id          Name
----------- ---------------
1           LogisticsLinguagem de código:  texto simples  ( texto simples )

Para excluir uma linha do banco de dados, siga estas etapas:

  • Primeiro, obtenha a entidade do banco de dados.
  • Segundo, remova a entidade do método DbSetby call .DbSetRemove()
  • Terceiro, aplique a alteração ao banco de dados chamando o SaveChanges()método.

Por exemplo, o seguinte obtém o departamento com Id 1 e o remove do banco de dados:

using HR;

using var context = new HRContext();

// get the deparment
var department = context.Departments.Find(1);

if(department is not null)
{
    // remove it
    context.Departments.Remove(department);
    
    // commit the change to the database
    context.SaveChanges();
}Linguagem de código:  C#  ( cs )

Como funciona.

Primeiro, obtenha o departamento com id 1 no banco de dados:

var department = context.Departments.Find(1);Linguagem de código:  C#  ( cs )

O EF Core executa uma SELECTinstrução que recupera um departamento por id:

-- [Parameters=[@__p_0='1'], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [d].[Id], [d].[Name]
FROM [Departments] AS [d]
WHERE [d].[Id] = @__p_0Linguagem de código:  C#  ( cs )

Segundo, remova o departamento do DbSete chame o SaveChanges()para remover o departamento do banco de dados:

if(department is not null)
{
    // remove it
    context.Departments.Remove(department);
    
    // commit the change to the database
    context.SaveChanges();
}Linguagem de código:  C#  ( cs )

O EF Core executará uma DELETEinstrução simples que exclui o departamento com id 1 da tabela Departamentos:

-- [Parameters=[@p0='1'], CommandType='Text', CommandTimeout='30']
SET IMPLICIT_TRANSACTIONS OFF;
SET NOCOUNT ON;
DELETE FROM [Departments]
OUTPUT 1
WHERE [Id] = @p0;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Exclusão em cascata

O programa a seguir insere um funcionário com um departamento nas tabelas Employeese Departments:

using HR;

using var context = new HRContext();

var employee = new Employee()
{
    FirstName = "Jane",
    LastName = "Doe",
    Salary = 120_000,
    JoinedDate = new DateTime(2023, 5, 1),
    Department = new Department() { Name = "IT" }
};

context.Add(employee);
context.SaveChanges();Linguagem de código:  C#  ( cs )

A Employeestabela (nem todos os campos):

Id          FirstName       LastName        DepartmentId
----------- --------------- --------------- ------------
1           Jane            Doe             2Linguagem de código:  texto simples  ( texto simples )

A Departmentsmesa:

Id          Name
----------- ---------------
2           ITLinguagem de código:  texto simples  ( texto simples )

A DepartmentIdcoluna da Employeestabela faz referência à Idcoluna da Employeestabela. Devido às configurações padrão de restrição de chave estrangeira , quando você exclui um departamento, todos os funcionários associados ao departamento também serão removidos automaticamente pelo servidor de banco de dados. É chamado ON DELETE CASCADEno banco de dados.

Por exemplo:

using HR;

using var context = new HRContext();

// find department id 2 
var department = context.Departments.Find(2);

if (department is not null)
{
    // delete the department
    context.Departments.Remove(department);
    context.SaveChanges();

    // all employees associcated with the department
    // will be removed by the database
}Linguagem de código:  C#  ( cs )

Se você visualizar os dados das tabelas Departmentse Employees, verá que ambas as tabelas estão vazias

Resumo

  • Para excluir uma entidade, primeiro obtenha-a do banco de dados, depois remova-a do DbSete chame o SaveChanges()para excluí-la do banco de dados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *