Внешний ключ с несколькими унаследованными классами EF Core 2.0 Code First - PullRequest
0 голосов
/ 11 июня 2018

У меня есть 2 класса ( A & B ), оба наследуют от моего Base класса.
Мой Side Класс имеет BaseId и поле Base .

Я работаю с Code First и Table для конкретного класса (TPC)

Я пытаюсь создать внешние ключи длясоедините таблицу Side с моей таблицей A & B .Когда я создаю только одно отношение с свободно API, он работает нормально.Но когда я добавляю второй, новая миграция сбрасывает FK с A и создает новый для B .Почему я не могу создать 2 отношения?

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 голосов
/ 18 ноября 2018

Надеюсь, вы уже поняли это, но, как упоминалось ранее, таблица 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
 }
...