Cómo asignar claves externas entre los objetos TPH TPT: el código de Entity Framework primero

Tenemos el siguiente conjunto de objetos.

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; }
}

Esto crea 3 tablas para los formularios.Form, FormAyFormB, todos con los campos apropiados en ellos. También crea 1 tabla paraPerson.

El problema es cuando confiamos en la convención y no especificamos elForeignKey atribuir elPerson tabla contiene 2 columnas de clave externa adicionales.

Sin embargo, cuando especificamos elForeignKey atributo (como en el código anterior) obtenemos el siguiente mensaje de error.

`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 es definitivamente una propiedad deChild así que no estoy seguro de qué está mal.

Nuestra situación en el mundo real es mucho más complicada que la situación anterior, así que me gustaría hacerlo ahora mismo en lugar de tener varias claves externas.

Cualquier ayuda es muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta