多级继承。实体框架C#

时间:2017-08-21 15:11:49

标签: c# visual-studio entity-framework inheritance ef-code-first

我一直在使用Visual Studio 2015继承Entity Framework 6(代码优先)。 在这一点上,我想尝试像这样的多重继承(这是一个摘要,而不是完全合成的语法):

public abstract class Person {
    public String Name
    public String LastName
}

public class Teacher : Person {
    [Key]public int Id_Teacher
}

public class Student : Person {
    [Key] public int Id_Student
    public string code_s
}

public class ExchangeStudent : Student {
    [Key] public int Id_ExchangeStud
    public string HomeUniversity
}

我已经迈出了第一步,即创建人物和儿童表教师&学生,但是在创建第三个子表时,它不起作用。

我在第一步使用了TPC,因此在上下文中我获得了学生和教师的DbSet。

有没有办法实现第三个表EXCHANGE STUDENT ??

非常感谢你。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您的模型设计应如下所示,

    public class Person
    {
        [key] //No need to mention [key] annotation here, Because EF will automatically understand Id property will act as Primary Key.
        public int Id { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
    }

    public class Teacher: Person
    {

    }

    public class Student: Person
    {
        public string Code { get; set; }
    }

    public class ExchangeStudent : Student
    {

        public string HomeUniversity { get; set; }
    }

您必须避免每个子类中的每个 [Key] 属性。 B ase Class 将具有Id属性,该属性将充当Table和所有其他子类的PrimaryKey。

如果按照上述步骤操作,将迁移脚本应用到表中后,系统将为子类创建一个带有Discriminator列的表(人员)。

希望这可以帮助你前进!