2011-10-25 10 views
8

Tengo dos tablas Application_User y Application_User_Access. La tabla Application_User_Access tiene una restricción de clave externa con la tabla Application_User.La instrucción DELETE entró en conflicto con la restricción REFERENCE en ASP.NET Dynamic Data

Cuando elimino un registro en la tabla Application_User, recibo la excepción "The DELETE statement conflicted with the REFERENCE constraint".

Esto ocurre en la aplicación web de entidades de datos dinámicos de ASP.NET. Quiero eliminar todos los registros secundarios en este caso y finalmente eliminar el registro principal. ¿Cómo implementar esto?

Respuesta

12

Puede implementar una eliminación en cascada para la tabla Application_User_Access. Para esto, necesitas modificar un poco tu esquema DB. Concretamente eliminar la referencia anterior de la Application_User_Access a la mesa Application_User y añadir una nueva:

--not sure about the column names though 

ALTER TABLE Application_User_Access 
ADD CONSTRAINT FK_Application_User_Access_Application_User 
FOREIGN KEY (used_id) 
REFERENCES Application_User(id) 
ON DELETE CASCADE 
GO 

en cuenta que una cosa ON DELETE CASCADE. Esto significa que siempre que se elimine el registro de clave principal, también se eliminará el registro de clave externa que hace referencia a él.

+0

En la clase parcial de mi contexto, agregué el método OnSavingChanges con el siguiente código, – Anand

+1

Bueno, este es un enfoque posible, pero tiene un pequeño error. Los registros 'Application_User_Access' no tienen sentido sin' Application_User'. Esta no es una regla de negocios, es una cuestión de integridad de DB. Es por eso que diría que modificar la restricción agregando la eliminación en cascada es un poco mejor aquí. Pero después de todo, debe elegir el enfoque que le resulte más cómodo. – Andrei

+0

Cambiarlo a ON DELETE CASCADE no funciona para mí. – MindBrain

Cuestiones relacionadas