如何在不将导航属性设置为[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;}
}
删除主类应删除所有相关的子项
答案 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对象被删除。