2011-10-25 30 views
8

Tôi có hai bảng Application_User và Application_User_Access. Bảng Application_User_Access đang có ràng buộc khóa ngoài với bảng Application_User.Câu lệnh DELETE xung đột với ràng buộc REFERENCE trong ASP.NET Dynamic Data

Khi tôi xóa bản ghi trong bảng Application_User, tôi nhận được "tuyên bố DELETE xung đột với ràng buộc REFERENCE" ngoại lệ.

Điều này xảy ra trong ứng dụng Web ASP.NET đối tượng dữ liệu động. Tôi muốn xóa tất cả các bản ghi con trong trường hợp này và cuối cùng xóa bản ghi cha. Làm thế nào để thực hiện điều này?

Trả lời

12

Bạn có thể triển khai xóa tầng cho bảng Application_User_Access. Đối với điều này, bạn cần phải sửa đổi lược đồ DB của bạn một chút. Cụ thể loại bỏ các tài liệu tham khảo trước đó từ Application_User_Access vào bảng Application_User và thêm một hình mới:

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

ý rằng ON DELETE CASCADE điều. Nó có nghĩa là bất cứ khi nào bản ghi khóa chính bị xóa, bản ghi khóa ngoài tham chiếu nó cũng sẽ bị xóa.

+0

Trong một phần của bối cảnh của tôi, tôi đã thêm phương thức OnSavingChanges với mã bên dưới, – Anand

+1

Vâng, đây là một cách tiếp cận có thể, nhưng nó có một chút sai sót. Các bản ghi 'Application_User_Access' không có nghĩa là không có' Application_User'. Đây không phải là một quy tắc kinh doanh, đó là vấn đề tính toàn vẹn của DB. Đó là lý do tại sao tôi muốn nói rằng việc sửa đổi ràng buộc bằng cách thêm xóa tầng là tốt hơn một chút ở đây. Nhưng sau khi tất cả các bạn nên đi với cách tiếp cận mà bạn thấy thoải mái nhất. – Andrei

+0

Thay đổi nó thành ON DELETE CASCADE không hoạt động đối với tôi. – MindBrain

Các vấn đề liên quan