Как отобразить внешние ключи между объектами 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
поэтому я не уверен, что происходит не так.
Наша реальная ситуация намного сложнее, чем ситуация выше, поэтому я хотел бы получить ее прямо сейчас, а не иметь несколько внешних ключей.
Любая помощь очень ценится.