2011-10-25 9 views
8

Ho due tabelle Application_User e Application_User_Access. La tabella Application_User_Access ha un vincolo di chiave esterna con la tabella Application_User.L'istruzione DELETE è in conflitto con il vincolo REFERENCE in ASP.NET Dynamic Data

Quando elimino un record nella tabella Application_User, viene visualizzata l'eccezione "L'istruzione DELETE in conflitto con il vincolo REFERENCE".

Ciò si verifica nell'applicazione Web ASP.NET Dynamic Data Entities. Voglio eliminare tutti i record figlio in questo caso e infine eliminare il record padre. Come implementarlo?

risposta

12

È possibile implementare un'eliminazione a catena per la tabella Application_User_Access. Per questo è necessario modificare lo schema del DB un po '. Concretamente rimuovere il riferimento precedente dal Application_User_Access alla tavola Application_User e aggiungere uno nuovo:

--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 

noti che ON DELETE CASCADE cosa. Significa che ogni volta che il record della chiave primaria viene cancellato, anche il record della chiave esterna che fa riferimento a questo verrà rimosso.

+0

Nella classe parziale del mio contesto, ho aggiunto il metodo OnSavingChanges con il codice seguente, – Anand

+1

Bene, questo è un approccio possibile, ma ha un piccolo difetto. I record 'Application_User_Access' non hanno senso senza' Application_User'. Questa non è una regola aziendale, è una questione di integrità del DB. Ecco perché direi che modificare il vincolo aggiungendo l'eliminazione a cascata è un po 'meglio qui. Ma dopotutto dovresti seguire l'approccio che ritieni più comodo. – Andrei

+0

Cambiarlo in ON DELETE CASCADE non funziona per me. – MindBrain