c# - 每个类型表中的级联删除 (TPT) EF Core 5

标签 c# asp.net-core .net-core entity-framework-core

我有两个实体员工经理,并且我正在使用 ef core 5

public class Employee
{
        public long Id{ get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
}

public class Manager : Employee
{
        public long StoreId{ get; private set; }
}

我使用每个表的类型,使用 Fluent api

class EmployeeConfiguration : IEntityTypeConfiguration<Employee>
    {

        public void Configure(EntityTypeBuilder<Employee> builder)
        {
            builder.ToTable("Employee");
            builder.HasKey(x => x.Id);    

        }
    }

class ManagerConfiguration : IEntityTypeConfiguration<Manager>
    {

        public void Configure(EntityTypeBuilder<Manager> builder)
        {
            builder.ToTable("Manager");
        }
    }

结果我有两个表。问题是,我想要级联删除行为,当我删除员工时,我想删除经理表的记录。 但默认行为不是这样的。当我尝试删除父记录时,我遇到了 fk 违规

如何在每种类型的情况下在表中配置 OnDelete?

编辑 EF core理解与迁移后生成的关系

b.HasOne(".......Employee", null)
                        .WithOne()
                        .HasForeignKey("....Manager", "Id")
                        .OnDelete(DeleteBehavior.ClientCascade)
                        .IsRequired();

最佳答案

我知道这已经很旧了。但我是这样做的,以防有人看到。

modelBuilder.Entity<Manager>(entity =>
{
    entity.ToTable("Manager")
        .HasOne<Employee>()
        .WithOne()
        .HasForeignKey<Manager>(x => x.Id)
        .OnDelete(DeleteBehavior.Cascade);
});

关于c# - 每个类型表中的级联删除 (TPT) EF Core 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67010304/

相关文章:

c# - 确定反射类型是否可以转换为另一个反射类型

iis - 如何将 WebDeploy 与 ASP.Net core 结合使用

c# - Web套接字Ping/Pong和Close控制框架的实现

c# - 如何在 WebBrowser 控件中启用 inPrivate 模式

c# - 将身份验证移至服务

c# - 如何确定是否安装了 .NET Core

asp.net-core - 没有 jQuery 的 Asp.Net Core 验证

c# - 为什么 int 属性的 IsValueType 为 false?

c# - .Net Core 5 应用程序是如何组织/结构化的?或者如何将 n 层类库项目添加到 .Net 核心 Asp.Net 解决方案?

c# - 如何通过 LINQ 将 TimeSpan 计算转换为 SQL