Pregunta

Entonces, tengo un buen modelo de dominio construido. Los repositorios manejan el acceso a datos y lo que no. Ha aparecido un nuevo requisito que indica que las razones deben registrarse con eliminaciones. Hasta ahora, las eliminaciones han sido bastante simples = > Entity.Children.Remove (child). No estaba ocurriendo un seguimiento de cambios internos ya que mi herramienta ORM manejaba la administración de estado. Sin embargo, no estoy seguro de cómo manejar esto.

1) Podría mantener una colección secundaria eliminada en la entidad principal y extraer el seguimiento de cambios de nHibernate y manejarlo yo mismo.

2) ??????

¿Fue útil?

Solución

Ok, esto suena loco y voy a intentarlo de nuevo, aunque me den una paliza por mal uso de nHibernate. Antes de eliminar, ¿por qué no selecciona los elementos secundarios que se van a eliminar (ya tiene sus identificadores correctos?) Y realiza una transformación en cualquier entidad que vaya a utilizar para registrar sus eliminaciones en una tabla. Agregue el motivo a las entidades y guárdelas, luego continúe con sus eliminaciones. La mejor parte es que puede usar una entidad genérica, es decir, '' auditInfo '' para el resultado de la transformación, y puede hacerlo dentro de una transacción para que pueda deshacer todo si algo falla. OK, tal vez loco pero creativo ¿verdad?

Otros consejos

¿Podría implementar la Interfaz IInterceptor y anular la funcionalidad onDelete para extraer la información que necesita de la entidad y enviarla al registrador antes de eliminarla (usando NHibernate, por supuesto)

ejemplo

Si las eliminaciones son relativamente raras para ese tipo de entidad en particular, agregaría un indicador a la entidad para marcarlo como lógicamente " eliminado " en lugar de eliminar realmente la fila. La aplicación tendría que manejar la ocultación de estas entidades en circunstancias normales.

Si esto causara un número inaceptable de '' rancio '' filas: sugeriría algo similar a la respuesta de Watson. Dependiendo de los requisitos exactos, probablemente podría salirse con el registro de los datos eliminados y una razón adicional. campo en algún lugar directamente desde la aplicación. El uso de interceptores es más transparente y más agradable desde el punto de vista de la auditoría, pero un registro de eliminación separado (tabla, base de datos, archivo) es probablemente más simple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top