Eliminacion en cascada

Preguntado hace 11 meses

Johan Ramírez

Editada hace 10 meses

Javier Suero
Votos
PositivosNegativosTotal
0 0 0
38 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Como se realiza la eliminacion en cascada en sql utilizando c#

La informacion, que e encontrado, no es muy clara

Gracias

Actualizando datos
Hola, Johan, he añadido la etiqueta delete-cascade para que sea más fácil encontrar tu pregunta. Un saludo. Javier Suero hace 10 meses

2 Respuestas

Hace 11 meses

Manuel Fernández
Votos
PositivosNegativosTotal
202

Lo primero es que no puedes realizar un borrado en cascada en c#. Es un proceso de base de datos, el cual podas provocar desde c#, como mucho.

Tienes varias opciones para este tipo de problemática, las restricciones de integridad referencial:

Puedes establecer en la creación de la relación que exista un borrado en cascada automático.

ALTER TABLE [dbo].USER_PHONE  WITH CHECK ADD
CONSTRAINT [FK_Temp_UsersPhone_Users] FOREIGN KEY([USR_ID])
REFERENCES [dbo].[Users] ([USR_ID])
ON DELETE CASCADE

Sacado de http://rudesyle.wordpress.com/2008/01/28/cascading-deletes-in-sql-server/

Es una opción bastante "agresiva" y peligrosa. Imagina que un sql mal construido borra un estado. Con un delete cascade te borraría todos los usuarios con ese estado.

No la recomendaría, en principio.

Otra opción es centralizar el borrado en un procedimiento almacenado o en triggers para sólo en ese caso borrar en orden primero los registros en las tablas que hacen de clave externa y finalmente la principal.

Puedes tratar de hacer algo programático (o buscarlo hecho) que averigüe el orden leyendo la información de Master y borre en ese orden. Pero lleva su tiempo de desarrollo.

Una tercera vía, que suele ser la que uso, es que el borrado no es real, es un borrado "lógico". Tienes un campo "borrado" de tipo bit 0 default. Cuando quieres borrar haces un "Update Tabla set borrado=1, fechaBaja=getdate() where ...". Es una manera de tener histórico además. En las consultas siempre hay que filtrar " where borrado=0" para ver los activos.

¿Usas linq to sql? Porque me parece que entonces es otra guerra :)

Un saludo.

Cerrar

Hace 11 meses

Christian Córdoba
Votos
PositivosNegativosTotal
000

Qué base de datos utilizas? Para las claves ajenas se puede establecer la política on delete cascade me parece que en casi todos los sgbd conocidos.

Cerrar

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres