2013-07-29 55 views
16

Như tôi hiểu, nếu tôi xóa hàng gốc, con của nó sẽ bị xóa nếu tôi bật thác trên xóa. Tuy nhiên, từ thử nghiệm của tôi, nó dường như không hoạt động chút nào. Không có vấn đề gì nếu tôi đặt WillCascaseOnDelete thành true hoặc false, nó chỉ đơn giản là đặt khóa ngoại của con của nó thành null. Điều này gây ra một vấn đề khác mà tôi phải thiết lập khóa ngoại nullable, nếu không, SaveChange sẽ ném ngoại lệ. Đây có phải là khiếm khuyết hoặc hành vi mong muốn không?Làm thế nào để WillCascadeOnDelete trong khuôn khổ thực thể làm việc?

Trả lời

12

Điều này là do khóa ngoại của bạn (con) không thể sử dụng được. Theo mặc định, khi xóa cha mẹ, nếu khóa ngoài trên mối quan hệ là nullable EF sẽ xóa phụ huynh và đặt khóa ngoài thành rỗng. Nếu khóa ngoài là NOT NULL, nó sẽ xóa con (hành vi bạn đang tìm kiếm?).

Bạn có thể thay đổi hành vi mặc định này here

+3

Tôi gặp vấn đề tương tự, Khóa ngoại của tôi được đặt là 'IsRequired();', mối quan hệ có '.WillCascadeOnDelete (true)' nhưng tôi vẫn nhận được Ngoại lệ khi cố gắng xóa đối tượng mẹ. –

+0

@UwConcept, tôi mong đợi một ngoại lệ sẽ được ném nếu bạn đã chỉ định mối quan hệ khóa ngoài là 'IsRequired(); 'là Entity Framework không thể đặt giá trị thành' null' sau khi loại bỏ đối tượng cha. – weenoid

+3

@weenoid Cảm ơn bạn đã trả lời. Nhưng nó sẽ không có ý nghĩa hơn để sau đó xóa đối tượng con thay vì thiết lập một giá trị NULL trong một trường không nullable? Chỉ cần hai xu của tôi. –

0

Hãy chắc chắn trên cửa sổ Ngoại chính mối quan hệ trong SQL Server, bạn đã chọn Cascade như quy tắc Delete.

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