2010-03-25 12 views
5

Estoy tratando de crear un conjunto de tablas donde no las eliminemos, sino que establecemos las banderas de archivo en su lugar. Cuando eliminamos una entidad, no debe eliminarse, sino que debe marcarse como archivada.¿Cómo consigo que el marco de entidad funcione con indicadores de archivo?

¿Cuáles son los patrones de programación para soportar esto?

También preferiría no tener que desplegar mis propios procs almacenados para cada tabla que tenga estas banderas de archivo si hay otra solución.

Respuesta

1
myEntity.IsArchived = true; 
context.SaveChanges(); 

si sus requerimientos son para no eliminar, entonces no elimine ;-)

+0

Mi principal preocupación es lograr que las relaciones entre las entidades sean correctas. Mi esperanza era no tener que consultar. Donde (o =>! O.Archived) contra cada relación. –

0

Vas a tener que escribir su propia lógica para hacer esto, y mantenerse alejado del método "MarkForDeletion" en la esas entidades.

Su lógica necesitará tomar una entidad proporcionada, modificarla de alguna manera para indicar que ahora está "archivada", y luego Guardar los cambios en el contexto.

A continuación, deberá asegurarse de que cualquier código extraído del DB respeta estos valores que significan un registro archivado.

Para hacerlo más simple, puede crear clases parciales para que coincidan con sus clases de entidad, por lo que honran, digamos, una interfaz personalizada. De esta forma, puede codificar contra la interfaz y no tener que usar la reflexión para establecer los valores de la entidad.

Si puede usar .NET 4.0, EF admite POCO y puede marcar las entidades de forma nativa con las interfaces apropiadas, lo que reducirá la cantidad de archivos con los que debe trabajar.

0

No estoy seguro acerca de las mejores prácticas, pero puede intentar escribir su propio método DeleteObject y ponerlo en una clase de algún tipo (EFHelper es el nombre de la clase que uso para este tipo de cosas). Luego, en lugar de llamar al ObjectContext.DeleteObject, llame al EFHelper.DeleteObject, y haga cualquier lógica personalizada que desee hacer en ese método. Si es coherente con la forma en que nombra estas propiedades de indicador de archivo, puede usar la API de reflexión de .NET para buscar la propiedad archive_flag de cada EntityObject que está "eliminando" y configurarla de manera adecuada.

Cuestiones relacionadas