2013-07-03 138 views
0

我有兩個表。這些是設計和喜歡。一個設計可以有很多喜歡,一個喜歡應該與一個設計有關。使用OneToMany關係刪除實體與另一個實體

當我嘗試刪除它拋出我異常的設計:

DELETE語句衝突與基準約束 「FK_dbo.DesignLike_dbo.Design_DesignId」。衝突發生在 數據庫「XXXDB」,表「dbo.DesignLike」,列'DesignId'。 聲明已被終止。

modelBuilder.Entity()。HasMany(x => x.Likes).WithRequired(x => x.Design).WillCascadeOnDelete(false);

我甚至不嘗試刪除相關實體?爲什麼我得到這個異常?

+0

不能刪除,除非所有的父條目子條目被刪除。如果你想刪除它們並將其設置爲.WillCascadeOnDelete(true); – Ehsan

回答

2

您試圖刪除仍有子對象的對象。而子對象的外鍵會給你這個例外。

在刪除當前對象之前,應該分離子對象將它們鏈接到另一個父對象。或者將它們包含在級聯刪除中。

在您的情況下,您嘗試刪除的設計至少有一個外鍵設置爲您設計的ID。當你現在刪除設計並且級聯關閉時,它將違反你喜歡的外鍵約束。

+0

WillCascadeOnDelete(true)不起作用。 –

+0

同樣的錯誤?看看生成的是什麼sql – JMan

0

聽起來您已將數據庫設置爲在您的DesignLike表中的DesignId列上強制執行有效外鍵約束。

如果您嘗試刪除Design,那麼您將刪除被所有DesignLikes作爲外鍵引用的DesignId。如果你被允許這樣做,你會發現你的數據庫處於不一致的狀態 - 如果沒有保證它引用了有效的記錄,你的外鍵就沒有真正的意義。

您可以從您的子對象移除現在是無效的外鍵,或者設置添加一個Deleted/Visible標誌,以你的Design如果你想保持Design和相應的DesignLikes

相關問題