2016-01-07 58 views
1

關係這些都是我的表:刪除對級聯多到很多關於EF

Tables

是否有應用刪除它們之間CASCADE一個標準的方式?

在一對多的關係中,我沒有問題,但在這種情況下,我不得不用我寫的方法手動刪除。

+0

通常情況下,刪除級聯EF中默認啓用。顯示映射的代碼 –

回答

0

正如你在圖片上顯示的那樣,你只有兩張桌子。無法將它們之間的關係設置爲多對多關係(只有當新對將出現時向這些表添加新列時,這是非常糟糕的做法)。您應該創建第三個表格,其中將包含其主鍵對。在您的遷移中,您將能夠在每個主表和第三個表之間指定cascadeDelete爲true。請看下圖:

模式:移民

public class BugReport 
{ 
    public BugReport() 
    { 
     dublicates = new HashSet<DublicateBugReport>(); 
    }   

    public int ID { get; set; } 
    public virtual ICollection<DublicateBugReport> dublicates { get; set; } 
} 

public class DublicateBugReport 
{ 
    public DublicateBugReport() 
    { 
     reports = new HashSet<BugReport>(); 
    }   

    public int ID { get; set; } 
    public virtual ICollection<BugReport> reports { get; set; } 
} 

海賊王:

public override void Up() 
    { 
     CreateTable(
      "BugReports", 
      c => new 
       { 
        ID = c.Int(nullable: false, identity: true), 
       }) 
      .PrimaryKey(t => t.ID)    ; 

     CreateTable(
      "DublicateBugReports", 
      c => new 
       { 
        ID = c.Int(nullable: false, identity: true), 
       }) 
      .PrimaryKey(t => t.ID)    ; 

     CreateTable(
      "DublicateBugReportBugReports", 
      c => new 
       { 
        DublicateBugReport_ID = c.Int(nullable: false), 
        BugReport_ID = c.Int(nullable: false), 
       }) 
      .PrimaryKey(t => new { t.DublicateBugReport_ID, t.BugReport_ID })     

      //pay attention! - cascadeDelete: true 
      .ForeignKey("DublicateBugReports", t => t.DublicateBugReport_ID, cascadeDelete: true) 
      .ForeignKey("BugReports", t => t.BugReport_ID, cascadeDelete: true) 
      .Index(t => t.DublicateBugReport_ID) 
      .Index(t => t.BugReport_ID); 

    }