2011-10-25 27 views
8

私は2つのテーブルApplication_UserとApplication_User_Accessを持っています。 Application_User_AccessテーブルがApplication_Userテーブルで外部キー制約を持っています。DELETEステートメントがASP.NET動的データのREFERENCE制約と競合しました

Application_Userテーブルのレコードを削除すると、「DELETEステートメントがREFERENCE制約と競合しました」という例外が表示されます。

これはASP.NET Dynamic Data Entities Webアプリケーションで発生します。この場合、すべての子レコードを削除し、最後に親レコードを削除したいと考えています。これを実装する方法は?

答えて

12

Application_User_Accessテーブルのカスケード削除を実装できます。このためには、DBスキーマを少し変更する必要があります。具体的にはApplication_UserテーブルにApplication_User_Accessから以前の参照を削除し、新しいものを追加します。

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

お知らせON DELETE CASCADEものという。これは、主キーレコードが削除されるたびに、それを参照する外部キーレコードも削除されることを意味します。

+0

私のコンテキストの部分クラスでは、以下のコードを使ってOnSavingChangesメソッドを追加しました。 – Anand

+1

これは可能なアプローチですが、少し欠点があります。 'Application_User_Access'レコードは' Application_User'なしで意味をなさない。これはビジネスルールではなく、DBの整合性の問題です。そのため、カスケード削除を追加することによって制約を変更することがここでは少し良いと言えます。しかし、結局のところ、あなたは最も快適なアプローチで行くべきです。 – Andrei

+0

ON DELETE CASCADEに変更することはできません。 – MindBrain

関連する問題