Pergunta

Então, eu tenho um modelo de domínio bom construído. Repositórios de lidar com o acesso a dados e não o que. Uma nova requisitos estalou acima que indica que as razões precisa estar logado com exclusões. Até agora, as exclusões foram bastante simples => Entity.Children.Remove (criança). No seguimento mudança interna estava acontecendo como minha ferramenta ORM foi lidar com a gestão do estado. No entanto, eu não tenho certeza exactyl como lidar com isso.

1) Eu poderia manter uma coleção crianças excluídas na entidade pai e puxe o controle de alterações fora do nHibernate e manipulá-lo eu mesmo.

2) ??????

Foi útil?

Solução

Ok, isso parece loucura e eu vou tomar outra chance de isso - embora eu poderia ser espancado para uso mau nHibernate. Antes de excluir, por que você não selecionar as crianças que vão ser excluído (você já tem seus ids corrigir?) E fazer uma transformação em qualquer entidade o seu vai estar usando para registrar suas exclusões a uma tabela. Adicione o motivo para as entidades e salvá-los - então prosseguir com suas exclusões. A melhor parte, você pode usar uma entidade genérica ou seja, "auditInfo" para o resultado da transformação, e você pode fazê-lo dentro de uma transação para que você possa reverter tudo, se algo falhar! OK, talvez louco, mas criativo certo?

Outras dicas

Você poderia implementar o IInterceptor de interface e substituir a funcionalidade onDelete para puxar as informações necessárias da entidade e enviá-lo para logger antes de excluir (usando NHibernate é claro)?

exemplo

Se exclusões são relativamente raros para esse tipo de entidade particular, eu gostaria de acrescentar uma bandeira para a entidade para marcá-lo como logicamente "excluído" ao invés de realmente apagar a linha. A aplicação teria, então, para lidar com o esconderijo destas entidades em circunstâncias normais.

Se isto causaria um número inaceitável de linhas "obsoletos" - Gostaria de sugerir algo semelhante a resposta de Watson. Dependendo das necessidades exatas, você poderia provavelmente fugir com registrando os dados apagados e um campo extra "razão" em algum lugar diretamente do aplicativo. Usando interceptadores é mais transparente e mais agradável do ponto de vista de auditoria, mas um registro de eliminação separada (tabela, banco de dados, arquivo) é provavelmente mais simples.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top