Pular para o conteúdo
.NETRemovendo recursos e filhos
Módulo 04CRUD Completo e Validação

Removendo recursos e filhos

intermediario 25 min de leitura·Atualizado · .NET 9
Resumo

DELETE remove um recurso e deve responder 204 No Content em caso de sucesso. Ao remover um pai, o comportamento em cascata do EF Core cuida dos filhos.

1. Objetivos de Aprendizagem#

  • Implementar DELETE retornando 204 No Content.
  • Entender o efeito do DeleteBehavior.Cascade sobre filhos.
  • Reutilizar a validação de existência da Service Layer.

2. Pré-requisitos#

  • Recurso único e exceções de domínio (Módulo 20).

3. Conceito#

DELETE é idempotente: remover o mesmo recurso repetidamente resulta no mesmo estado final. A resposta idiomática de sucesso é 204 No Content (sem corpo). O porquê de 204: a operação teve sucesso e não há representação a devolver.

Quando o pai é removido e o relacionamento está configurado como Cascade (Módulo 17), o EF Core remove os filhos automaticamente.

4. Mão na Massa#

4.1. Setup#

Reuse repositórios e handler global.

4.2. Implementação Passo a Passo#

  1. Serviço de remoção:
C#
public async Task DeleteAsync(Guid categoriaId, bool trackChanges)
{
    var categoria = await _repo.Categoria.GetByIdAsync(categoriaId, trackChanges)
        ?? throw new CategoriaNotFoundException(categoriaId);

    _repo.Categoria.Delete(categoria); // filhos vão junto se Cascade
    await _repo.SaveAsync();
}
  1. Controller:
C#
[HttpDelete("{id:guid}")]
public async Task<IActionResult> Deletar(Guid id)
{
    await _service.Categoria.DeleteAsync(id, trackChanges: false);
    return NoContent();
}

4.3. Executando#

Shell
curl -i -X DELETE http://localhost:5000/api/categorias/{id}
# HTTP/1.1 204 No Content

5. Exemplo Completo#

Ao deletar um produto individual, o serviço valida a categoria e o produto (pertencimento) antes de remover, mantendo integridade referencial.

6. Boas Práticas e Armadilhas#

FaçaEvite
Retornar 204 No Content em sucessoRetornar 200 com corpo desnecessário
Definir explicitamente o comportamento de cascataAssumir cascata e apagar filhos sem querer
Validar existência antes de deletarChamar Delete em entidade não rastreada/inexistente
Atenção

cascata pode apagar mais do que você imagina. Em dados críticos, considere soft delete (marcar como inativo) em vez de remoção física.

7. Segurança e Produção#

  • Exija autorização adequada para DELETE (Módulo 40) — é uma operação destrutiva.
  • Para auditoria e recuperação, soft delete costuma ser preferível à remoção definitiva.

8. Exercícios#

  • Fácil: implemente DELETE de um produto específico.
  • Médio: troque a remoção física por soft delete (Ativo = false) e filtre inativos nas leituras.
  • Desafio: registre uma auditoria (quem/quando) de cada remoção.

9. Resumo#

DELETE é idempotente e responde 204. A validação de existência fica no serviço e o comportamento de cascata do EF Core governa a remoção de filhos — com soft delete como alternativa mais segura.

10. Próximos Passos#

Módulo 25: atualização completa com PUT e o cenário de upsert.

11. Referências#

24-01 — Removendo recursos e filhos | Curso ASP.NET Core