具有多个继承类的外键EF Core 2.0代码优先

时间:2018-06-11 18:12:28

标签: c# ef-code-first ef-fluent-api ef-core-2.0

我有2个班级( A& B ),都从我的基础班级继承。
我的 Side 类有 BaseId Base 字段。

我正在使用Code First和Table per Concrete Class(TPC)

我尝试创建外键以将 Side 表与我的 A& B 表。当我用流畅的api创建一个关系时,它工作正常。但是当我添加第二个时,新迁移会从 A 中删除FK,并为 B 创建一个新的迁移。为什么我不能建立两种关系?

public class Base
{
    public int    Id   { get; set; }
    public string Name { get; set; }
}

public class A : Base
{
    public string StringA { get; set; }
}

public class B : Base
{
    public string StringA { get; set; }
}

public class Side
{
    public int Id { get; set; }
    public int BaseId { get; set; }
    public Base Base { get; set; }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Side>().HasOne(s => (A) s.Base);
    modelBuilder.Entity<Side>().HasOne(s => (B) s.Base);
}

1 个答案:

答案 0 :(得分:0)

希望您已经弄清了这个问题,但是如前所述,不支持TPC表!您可以使用TPH。

要执行TPH,只需执行以下操作:

modelBuilder.Entity<Side>.ToTable("Sides")
            .HasDiscriminator<SideType>("SideType")
            .HasValue<A>(SideType.BASE_A)
            .HasValue<B>(SideType.BASE_A);



 public enum SideType {
    BASE_A = 100,
    BASE_B = 500
 }