EF 5 Release Candidate 1 — SoftDelete ou Exclusão lógica
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