none
Eliminación en Cascada SQL - Entity Framework

    Pregunta

  • hola quisiera saber como puedo hacer para indicarle al usuario que se van a borrar "mas de una tabla" por así decirlo. Actualmente tengo configurado las restricciones de las FK con eliminación en cascada, lo que quiero lograr es que si "persona" está registrada en mas de un tabla entonces que le muestre al usuario algún cartel indicando que se van a borrar otras cosas ademas de "persona".

    si yo ejecuto esto me borra todo, lo cual es correcto, pero quiero ver si hay alguna forma de saber si esa "persona" tiene otros registros relacionados en otras tablas (sin tener que hacer adicionales consultas a la bd, como por ejemplo buscar en cada tabla, donde es FK, si existe la PK de persona)

    db.persona.Remove(persona); 
    db.SaveChanges();

    saludos

    miércoles, 6 de junio de 2018 4:29

Respuestas

  • No, me temo que no puedes lograr ese aviso con Entity Framework. La cuestión es que EF no "sabe" que existe esa eliminación en cascada. EF solo transmite una única eliminación hacia la tabla "persona", y luego todos los borrados en cascada ocurren en el lado servidor sin que EF se entere.

    Así que, si quieres saber "dinámicamente" si existen esos borrados (antes de ejecutarlos) tendrás que hacer lo que no quieres hacer, es decir, consultar el esquema de la BD para ver qué Foreign Keys hay y si tienen el on delete cascade.

    Una "chapucilla" que podrías hacer es abrir una transacción, realizar el borrado, leer el número de filas afectadas, y hacer un rollback de la transacción. Si el número de filas afectadas es mayor que el número de filas que mandaste borrar quiere decir que había borrados en cascada. Pero no sé cómo se puede leer el número de filas afectadas desde EF, habría que hacerlo con un ExecuteNonQuery desde un SqlCommand.

    miércoles, 6 de junio de 2018 5:35