2011-05-28 139 views
3

我有一個[Product] -1 - * - [Component]。所以當我刪除一個產品時,我想讓EF刪除它的所有組件。在設計師,我選擇的關係,併爲END1至級聯,其多樣性是0..1的OnDelete財產 - 這會產生類似:級聯刪除一對多關係

ALTER TABLE [dbo].[Components] 
ADD CONSTRAINT [FK_ProductComponent] 
    FOREIGN KEY ([Product_Id]) 
    REFERENCES [dbo].[Products] 
     ([Id]) 
    ON DELETE CASCADE ON UPDATE NO ACTION; 

這對我來說,是指當一個組件被刪除,刪除應級聯,相關產品也應自動刪除。

這是從我想要的倒退。所以,我編輯的END2串級屬性(END1被重置爲無),但試圖保存模型,我得到的時候:

Error 28 Running transformation: End 'Text' on relationship 
'EF.ProductComponent' cannot have operation specified since its multiplicity 
is '*'. Operations cannot be specified on ends with multiplicity '*'. C:\Users 
\me\Documents\Visual Studio 2010\Projects\X\Website\Models\EF.edmx 

清楚,我不明白這一點。有可能做我想做的事,不是嗎?怎麼樣?

+2

在上面你向後理解它。通過對外鍵約束應用「on delete」,你說......如果父母被刪除,也刪除我。 – RThomas 2011-05-28 03:49:59

回答

3

這是一個很好的鏈接,詳細解釋它。但簡而言之,EF在處理級聯刪除方面不是很可靠。你應該手動在數據庫端設置它,因爲EF可能沒有。

http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx

我的回答的第二部分是.....級聯刪除這樣的,如果你刪除父...所有的孩子被刪除,以及作品。無論是否有層疊刪除,刪除子項對父級都沒有影響。

是的,ON DELETE CASCADE應該出現在子表的外鍵約束上。

具有良好的信息其他鏈接:http://msdn.microsoft.com/en-us/library/ms186973.aspx

+0

我讀過這個鏈接,但是並沒有發現EF創建FK_ProductComponent約束的事實,刪除級聯完成了Golden Rule#1?我的問題是產品被刪除時應該發生級聯,而不是組件時,但EF不允許我表達這種情況... – ekkis 2011-05-28 03:38:54

+0

如果您已驗證顯示的約束實際存在於服務器上,則如圖所示它應該做你所描述的。你有沒有測試過,發現不同。你說你修改了屬性並且有錯誤,但是你測試了它嗎? – RThomas 2011-05-28 03:45:45

+1

我想出了我不明白的東西......查找關於添加外鍵約束的文檔。設置ON DELETE CASCADE表示刪除父表時刪除表中的行將被刪除。我在想,需要將約束添加到父表中,而不是依賴關係。但是,這只是我愚蠢 - 你沒有指出,我想我們只看到我們想看到的。:) – ekkis 2011-05-28 03:57:21