EF 5 Release Candidate 1 — SoftDelete ou Exclusão lógica

Fulvio Cezar Canducci Dias
2 min readSep 24, 2020

Foi lançado o Release Candidate 1 do ORM Entity Framework e com um artigo que escrevi abriu um leque de opções, uma delas é na criação de um campo na sua tabela para identificar a exclusão não definitiva de um registro, ou seja, o registro fica armazenada na sua tabela mas, com um valor ou flag que o identifica como excluído.

Isso é bom fica como fator de histórico de registros e até para futura recuperação de algum erro ou registro indevidamente excluido.

Com o recurso adicionado SaveChanges interception and events e alguns já existentes como por exemplo filtro global automático vai ser criado um exemplo pelo qual em um determinado momento do desenvolvimento foi decidido Remover o registro, mas, vamos mudar o seu status de remover para atualizar, exemplo:

Criar um Interception herdando a classe abstrata SaveChangesInterceptor:

que tem a função antes de gravar fazer as devidas alterações como colocar a data atual de exclusão e mudar o status da entidade para atualização.

Para que isso ocorra é criado um interface com o seguinte código:

e a mesma é implementada em um determinada classe que é usado pelo Entity Framework Core como uma de suas entidades:

Nas configurações da camada de persistência configure dois aspectos o AddInterceptors com a classe SoftDeleteSaveChangesInterceptor e no momento de configurar a entidade criar um filtro global com o método HasQueryFilter perguntado se a Data é nula, isso significa que o registro não foi excluído, exemplo:

As operações que criam registro, alteram e trazem registro continua com o mesmo comportamento, já a que remove os registros essa muda seu comportamento para atualizar, mas, passa um valor para o campo que significa que esse registro é excluído logicamente.

Projeto Link Completo:

Resolvi também deixar um pacote no Gerenciador de Pacotes Nuget que facilita no desenvolvimento:

Referencias

--

--

Fulvio Cezar Canducci Dias

Bacharel em Sistemas de Informação, MTAC (Multi-Plataform Technical Audience Contributor-Microsoft), BackEnd C# e PHP e Developer Web