2017-08-21 147 views
0

我一直在使用Visual Studio 2015实体框架6(代码优先)的继承。 在这一点上,我想尝试像这样的多继承(这是一个摘要不完全合成文本):多级继承。实体框架C#

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 
} 

我已经完成了第一步,即创建Person和Child表Teacher & Student,但是当涉及到创建第三个子表时,它不起作用。

我在第一步使用了TPC,所以在上下文中我得到了学生和教师的DbSet。

有什么办法可以实现第三张表交换学生?

非常感谢。

+0

你面临的问题是什么?所有成员都没有分号。它是一个属性还是变量 –

+1

请勿覆盖主键属性。把它放在基类中,将其称为ID并将ti用于所有派生类。 – DavidG

回答

0

如果我理解正确的话,你的模型设计应该看起来像下面,

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

你要避免每次[关键]在每个子类性能。 B ase类将具有一个Id属性,它将充当表和所有其他子类的PrimaryKey。

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

希望这可以帮助你前进!