2016-08-24 30 views
2

如何在沒有將導航屬性設置爲[必需]或不可空的情況下將級聯刪除配置到代碼優先項目?ASP.NET MVC。如何手動添加「級聯刪除」到代碼第一關係?

例如:

class MainClass{ 
    [Key] int id {get;set;} 
    public string name {get;set;} 
    public virtual ICollection<SubItem> subItems {get;set} 
} 

Class SubItem{ 
    [Key] int id {get; set;} 
    public string name {get;set;} 
} 

刪除主類應該刪除所有相關的子項

回答

1

要具有級聯通過先建立一個代碼刪除對空的外鍵,實現這一目標的最佳方式可能是通過Fluent API。

這流利的API代碼添加到您的DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<SubItem>() 
      .HasOptional(o => o.MainClass) 
      .WithMany(m => m.subItems) 
      .HasForeignKey(k => k.MainClassId) 
      .WillCascadeOnDelete(true); 
} 

和您的子項類需要這些屬性進行更新:

Class SubItem 
{ 
    [Key] int id {get; set;} 
    public string name {get;set;} 
    public int? MainClassId { get; set;} 
    public virtual MainClass MainClass { get; set; } 
} 

我相信,如果要刪除的MainClass項目的子項目必須在上下文中加載(使用一個包含語句,當拉動MainClass對象時)將被刪除。

但是如果你進入你的數據庫並且設置了這個外鍵以啓用級聯刪除功能,那麼你就不必把SubItems加載到上下文中,因爲數據庫會在你處理級聯刪除時處理MainClass對象被刪除。

+0

我嘗試過,但似乎1x1,而不是1xMany依賴。 –

+1

@DanielSantos對不起,我錯了。我修復了它,並更新了我過去如何做到的答案。 – JustSomeDude