我有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);
}
答案 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
}