2011-10-17 73 views
1

我有一個屬性對象,我想從最新的資源庫集合中刪除它。或者我可以說在保存到數據庫之前先將它分離。有一個Property表是主要的,歷史和細節表通過共享PropertyId作爲關鍵字與Property有關。當我從存儲庫中分離對象並嘗試保存時,它會導致錯誤。實體框架中的SaveChanges插入語句外鍵錯誤

這樣做。

Repository.Detach(P); 

錯誤出在

Repository.SaveChanges(); 

錯誤:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_History_Property".
The conflict occurred in database "database", table "dbo.Property", column 'PropertyId'.
The statement has been terminated.

回答

1

嘗試刪除其他表的記錄是在刪除記錄之前引用您要刪除的記錄的主鍵。

例:

事務表

TransactionID DateOfTransaction CustomerID 
1    11/15/11   1 
2    11/15/11   2 
3    11/15/11   15 
4    11/15/11   3 

成交詳情

TransactionDetailID TransactionID ItemID Quatity 
1     1    43  15 
2     1    32  2 
3     2    43  89 
4     4    32  12 

TransactionID這裏是一個外鍵(主鍵與其它表)。之前,你可以刪除事務表父記錄,你必須先刪除所有記錄,爲它的PrimaryKey的引用避免外鍵約束錯誤

例:

如果你想從數據庫中刪除事務1 ,您必須首先刪除交易明細(交易明細1和2),然後才能允許您刪除交易ID 1

+0

我們如何刪除子對象。如果我正在嘗試這樣做,就像P.History和P.Detail那麼它是空的,所以我可以刪除它。 –

0

我想你的意思是使用之後

Repository.DeleteObject(P); 
ObjectContext.SaveChanges(); 

這當然假設您真的在使用一些支持DbContext模型的EntityFramework的更高版本。

在早期版本中,庫修改可以在存儲庫級別或ObjectContext的水平通過執行類似

ObjectContext.DeleteObject(P); 

隨後作出的

ObjectContext.SaveChanges(); 
+0

這會導致相同的問題,但它不會導致外鍵錯誤。該關係無法更改,因爲一個或多個外鍵屬性是不可空的。當對關係進行更改時,相關的外鍵屬性將設置爲空值。如果外鍵不支持空值,則必須定義新的關係,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。在System.Data.Objects.ObjectContext。SaveChanges(SaveOptions選項)在 –

+0

在存儲庫中刪除它並不意味着它可以被正確刪除。您還必須考慮引用表的主鍵的外鍵約束。 –