使用 EF 的 TPT 流畅语法级联删除 child 记录

Cascade delete child record using EF's TPT fluent syntax

我正在尝试获取 TPT 工作的基本示例。大多数参考资料一般性地讨论了 TPT 及其工作原理,但没有深入讨论实际的流畅映射细节。这是我目前所拥有的:

public abstract class Parent {
  public Parent() { }
  public int Id { get; set; }
  // other properties...
}

public class Child : Parent {
  public Child() : base() { }
  // other properties...
}

public class MyContext : DbContext {
  protected override void OnModelCreating(DbModelBuilder modelBuilder) {

    var p = modelBuilder.Entity<Parent>();
    p.ToTable("Parent");
    p.HasKey(m => m.Id);
    p.Property(m => m.Id).HasColumnName("Id").IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

    var c = modelBuilder.Entity<Child>();
    c.ToTable("Child");
    //c.HasKey(m => m.Id);                                     // needed?
    //c.Property(m => m.Id).HasColumnName("Id").IsRequired();  // needed?

  }
}

这就是我需要做的全部吗?某处是否有针对此特定案例的参考示例?

更新:
多亏了评论,我发现这是正确的,而且事情是按照惯例映射的。

不过我发现 child 记录在删除 parent 记录时不会自动级联删除。我可以通过脚本更改它,但我想使用 EF 方法。我如何配置 child 来做到这一点?

从回顾其他很久以前的问题来看,看起来像一个 bug/missing 功能。并且没有明确的解决方案...我已经找到了。

所以除非有人有更好的主意,否则我需要创建一个空迁移,并添加必要的 sql 语句以强制级联删除:

AddForeignKey("dbo.Child", "Id", "dbo.Parent", "Id", true);    // <- true is the trick

...生成:

ALTER TABLE [Child] ADD CONSTRAINT [FK_dbo.Child_dbo.Parent_Id]
FOREIGN KEY ([Id]) REFERENCES [Parent]([Id]) ON DELETE CASCADE ON UPDATE NO ACTION;

注意 ON DELETE CASCADE.

请问有没有更好的方法? (即不需要我摆弄迁移 and/or SQL。)