C# 实体框架级联删除每个类型实体的祖先表

C# 实体框架级联删除每个类型实体的祖先表,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我使用实体框架(代码优先)和表类型继承。子类具有链接实体的集合。以下是模型和上下文: public类BaseBlog { public int BaseBlogId{get;set;} } 公共类博客:BaseBlog { 公共字符串Url{get;set;} 公共虚拟ICollection Posts{get;set;} } 公营职位 { 公共int PostId{get;set;} 公共字符串标题{get;set;} 公共字符串内容{get;set;} public int BlogId{g

我使用实体框架(代码优先)和表类型继承。子类具有链接实体的集合。以下是模型和上下文:

public类BaseBlog
{
public int BaseBlogId{get;set;}
}
公共类博客:BaseBlog
{
公共字符串Url{get;set;}
公共虚拟ICollection Posts{get;set;}
}
公营职位
{
公共int PostId{get;set;}
公共字符串标题{get;set;}
公共字符串内容{get;set;}
public int BlogId{get;set;}
公共虚拟博客{get;set;}
}
公共类MyContext:DbContext
{
公共DbSet BaseBlogs{get;set;}
公共数据库集博客{get;set;}
公共DbSet Posts{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(nameof(Blog));
modelBuilder.Entity()
.HasRequired(x=>x.Blog)
.WithMany(x=>x.Posts)
.HasForeignKey(x=>x.BlogId)
.WillCascadeOnDelete(真);
}
}
使用添加迁移时,生成的迁移不会在Post和Blog之间的外键上启用级联删除:

CreateTable(
“dbo.Posts”,
c=>新的
{
PostId=c.Int(可为空:false,标识:true),
Title=c.String(),
Content=c.String(),
BlogId=c.Int(可空:false),
})
.PrimaryKey(t=>t.PostId)
.ForeignKey(“dbo.Blog”,t=>t.BlogId)//没有级联删除吗?
.Index(t=>t.BlogId);
调用WillCascadeOnDelete甚至不必要,因为这是默认设置(显然)。但包含或省略它都没有效果。我知道我可以使用手动将其添加到迁移脚本中

.ForeignKey(“dbo.Blog”,t=>t.BlogId,cascadeDelete:true)
但是,在生成迁移时,如何让EF自动执行该操作

如果我删除基类,那么级联删除将按预期自动添加到迁移中

这是EF版本6.4.4,但我也在6.1.3和6.0.2中进行了测试,同样的情况也发生了

请注意,这与在祖先和后代之间缺少级联删除,或者不存在相同的问题。在我的例子中,我看到的是由一对多关系关联的两个表之间的FK