ASP.NET MVC。如何手动将“级联删除”添加到代码第一关系?

时间:2016-08-24 01:50:22

标签: c# asp.net-mvc entity-framework ef-code-first code-first

如何在不将导航属性设置为[Required]或不可为空的情况下配置级联删除到Code First Project?

例如:

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 个答案:

答案 0 :(得分:1)

要通过首次设置的代码对Nullable外键进行级联删除,实现此目的的最佳方法可能是通过Fluent API。

将此Fluent 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);
}

并且您的SubItem类需要使用以下属性进行更新:

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

我相信如果要删除MainClass项,则必须在上下文中加载SubItems(在拉取MainClass对象时使用include语句)。

但是如果你进入你的数据库并设置这个外键以启用删除级联,那么你就不必将SubItems加载到上下文中,因为数据库将负责为你删除级联MainClass对象被删除。