2013-10-30 18 views
2

我不知道我是否缺少明顯的東西。我們在模型使用流暢API設置的項目中使用Entity Framework 6.0.0-rc1。我們其中一個實體的配置可能是:WillCascadeOnDelete不會在數據庫上建立級聯刪除

HasMany(t => t.Entity) 
.WithRequired(tc => tc.ParentEntity) 
.HasForeignKey(tc => new {tc.Key1, tc.Key2}) 
.WillCascadeOnDelete(true); 

當運行此配置時,數據庫被正確創建,包含所有表和字段。即使關係正確建立,但不是刪除級聯。

如果我去管理工作室,我檢查關係的更新/刪除規則,兩者都被禁用。

感謝您的幫助。

+0

無關的問題,但EF6現在是穩定的 - 你應該更新RC版本。 – Richard

+1

不清楚第一個'HasMany'是否被調用的類型,你能澄清一下嗎?你能向我們展示在遷移的Up()方法中生成的代碼嗎? – Colin

回答

2

這些類:

public class Parent 
{ 
    public int ID { get; set; } 
    public ICollection<Child> Children { get; set; } 
} 

public class Child 
{ 
    public int ID { get; set; } 
    public int ParentID { get; set; } 
    public Parent Parent { get; set; } 
} 

配置是這樣的:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Parent>() 
     .HasMany(p => p.Children) 
     .WithRequired(c => c.Parent) 
     .HasForeignKey(c => c.ParentID) 
     .WillCascadeOnDelete(true); 

} 

穿外鍵級聯刪除:

public override void Up() 
{ 
    CreateTable(
     "dbo.Children", 
     c => new 
      { 
       ID = c.Int(nullable: false, identity: true), 
       ParentID = c.Int(nullable: false), 
      }) 
     .PrimaryKey(t => t.ID) 
     .ForeignKey("dbo.Parents", t => t.ParentID, cascadeDelete: true) 
     .Index(t => t.ParentID); 

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

}