3

我有一個現有的(MSSQL 2008 R2)數據庫中有一個鏈接表相關的兩個表。如何使用EF4流利API級聯刪除鏈接表?

這兩張表是「計劃」和「提示」。鏈接表是「PlanTipLinks」。

計劃可以有很多提示,並且提示可以與多個計劃相關聯(即它是多對多的關係)。在應用程序中,我只關心「Plan.Tips」關係。我不需要Tip.Plans的反向關係。

鏈接表中的外鍵引用不能爲空。

我用下面的流暢API代碼映射這種關係:

modelBuilder.Entity<Plan>() 
    .HasMany(p => p.Tips) 
    .WithMany() 
    .Map("PlanTipLinks", (p, t) => 
     new 
     { 
      PlanId = p.Id, 
      TipId = t.Id 
     }); 

這在表中創建正確的條目。問題是,當我刪除一個計劃時,我在PlanTipLinks表上得到一個外鍵異常。

大概我需要告訴它當一個計劃被刪除時級聯到PlanTipLinks表中,但我不知道該怎麼做。我似乎無法使用HasMany/WithMany方法調用WillCascadeOnDelete方法。

我在這裏錯過了什麼?

回答

1

自EF CTP4起,無法直接通過Fluent API啓用多對多關聯上的級聯刪除。

也就是說,如果你的目的是不必擔心的鏈接表中的相關記錄,以確保您可以刪除原則(如計劃記錄)(即PlanTipLinks),那麼你不」需要打開數據庫中的級聯,因爲EF Code First會處理多對多關聯中的客戶端級聯刪除。

例如,當你刪除一個計劃對象,代碼首先是足夠聰明,首先發送一個delete語句在PlanTipLinks擺脫依賴記錄表之後,它會發送另一個DELETE語句刪除計劃記錄。

欲瞭解更多信息,請看看以下職位:
EF CTP4 cascade delete on many to many relationship

+1

@dommer,這究竟是怎麼回答幫助你,因爲你寫了「問題是,當我刪除一個計劃,我得到PlanTipLinks表上的外鍵異常。「?這個答案表明不會發生異常。 – 2014-09-23 09:45:57