Estoy trabajando con una base de datos donde los diseñadores decidieron marcar cada tabla con una columna de bits IsHistorical. No se tiene en cuenta el modelado adecuado y no hay forma de que pueda cambiar el esquema.Eliminaciones suaves (columna IsHistorical) con EntityFramework
Esto está causando cierta fricción cuando se desarrollan pantallas CRUD que interactúan con las propiedades de navegación. No puedo simplemente tomar un Producto y luego editar su EntityCollection. Tengo que escribir manualmente verificaciones IsHistorical por todos lados y me está volviendo loco.
Las adiciones también son horribles porque hasta ahora he escrito todas las comprobaciones manuales para ver si una adición es simplemente borrada, así que en lugar de agregar una entidad duplicada, puedo alternar IsHistoric.
Las tres opciones que he consideradas son:
Modificación de los modelos T4 a incluir controles IsHistorical y sincronización.
Interceptar eliminaciones y adiciones en ObjectContext, alternar la columna IsHistorical y sincronizar el estado del objeto.
Suscríbase al evento AssociationChanged y active la columna IsHistorical allí.
¿Alguien tiene alguna experiencia con esto o podría recomendar el enfoque más sencillo?
Nota: Sí, lo sé, este es un mal modelado. He leído los mismos artículos sobre eliminaciones suaves que tienes. Apesta que tengo que lidiar con este requisito, pero lo hago. Solo quiero el método más sencillo para tratar con eliminaciones suaves sin escribir el mismo código para cada propiedad de navegación en mi base de datos.
Nota # 2 La respuesta de LukeLed es correcta desde el punto de vista técnico, aunque te obliga a tener un patrón ORM, sin gráfico, pobremente malo. El problema radica en el hecho de que ahora estoy obligado a arrancar todos los objetos "eliminados" del gráfico y luego llamar al método Eliminar sobre cada uno. Eso no me va a ahorrar tanta codificación ceremonial manual. En lugar de escribir verificaciones IsHistoric manuales ahora estoy reuniendo objetos eliminados y recorriendo los mismos.
Siento tu dolor y supervisaré este hilo con cuidado. Espero que tengas una respuesta! –
¿Por qué dices que es realmente malo/malo? ¿Podrías explicar más? – LukLed