Как отобразить внешние ключи между объектами TPH TPT - Entity Framework Code First

У нас есть следующий набор объектов.

public class Form
{
    public int FormId { get; set; }
    public DateTime DateCreatedOn { get; set; }
    public string Status { get; set; }
}

// This is using TPT inheritance from Form
[Table("FormA")]
public class FormA : Form
{
    public string ExtraInfoA { get; set; }
    public virtual ICollection<Child> Children
}

// This is using TPT inheritance from Form
[Table("FormB")]
public class FormB : Form
{
    public string ExtraInfoB { get; set; }
    public virtual ICollection<Adult> Adults
}

public class Person
{
    public int PersonId { get; set; }
    public int FormId
    public DateTime DateOfBirth { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

// This is using TPH inheritance from Person
public class Adult : Person
{
    public int HowManyCars { get; set; }
    public string NationalInsuranceNo { get; set; }
    [ForeignKey("FormId")]
    public virtual FormB FormB { get; set; }
}

// This is using TPH inheritance from Person
public class Child : Person
{
    public int HowManyToys { get; set; }
    public string SchoolName { get; set; }
    [ForeignKey("FormId")]
    public virtual FormA FormA { get; set; }
}

Это создает 3 таблицы для формForm, FormA, а такжеFormBвсе с соответствующими полями в них. Также создается 1 таблица дляPerson.

Проблема заключается в том, когда мы полагаемся на соглашение и не указываемForeignKey приписатьPerson Таблица содержит 2 дополнительных столбца внешнего ключа.

Однако, когда мы указываемForeignKey Атрибут (как в коде выше) мы получаем следующее сообщение об ошибке.

`The foreign key component 'FormId' is not a declared property on type 'Child'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property.`

FormId определенно является собственностьюChild поэтому я не уверен, что происходит не так.

Наша реальная ситуация намного сложнее, чем ситуация выше, поэтому я хотел бы получить ее прямо сейчас, а не иметь несколько внешних ключей.

Любая помощь очень ценится.

Ответы на вопрос(1)

Ваш ответ на вопрос