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-Migration
comando no Package Manager Console (PMC) para criar uma nova migração:
Add-Migration Initial
Linguagem de código: C# ( cs )
Terceiro, execute o Update-Database
comando no PMC para criar um novo banco de dados e tabelas de RH no SQL Server local:
Update-Database
Linguagem de código: C# ( cs )
Execute uma exclusão simples
Trabalharemos com Departments
& Employees
tabelas:
O seguinte insere um novo departamento na Departments
tabela:
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 Departments
tabela conterá uma linha com Id 1:
Id Name
----------- ---------------
1 Logistics
Linguagem 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
by call .DbSet
DbSet
Remove()
- 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 SELECT
instruçã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_0
Linguagem de código: C# ( cs )
Segundo, remova o departamento do DbSet
e 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 DELETE
instruçã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 Employees
e 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 Employees
tabela (nem todos os campos):
Id FirstName LastName DepartmentId
----------- --------------- --------------- ------------
1 Jane Doe 2
Linguagem de código: texto simples ( texto simples )
A Departments
mesa:
Id Name
----------- ---------------
2 IT
Linguagem de código: texto simples ( texto simples )
A DepartmentId
coluna da Employees
tabela faz referência à Id
coluna da Employees
tabela. 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 CASCADE
no 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 Departments
e 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
DbSet
e chame oSaveChanges()
para excluí-la do banco de dados.