2带继承的POCO's创建一个表而不是两个表

本文关键字:一个 两个 继承 创建 POCO | 更新日期: 2023-09-27 18:09:08

我正在为假期系统创建一个相当简单的Database

<<p> 实体/strong>

Employee

public class Employee
{
  public int Id { get; set;}
  public string Username { get; set; }
  public LineManger Manager { get; set; }
}

LineManger

public class LineManager : Employee
{
  public string CompanySection { get; set; }
}

可以看到,每个员工都有一个LineManger,但是Employee可以是LineManager

在我的DbContext我有:

public DbSet<Employee> Employees { get; set; }
public DbSet<LineManager> Managers { get; set; }
public DbSet<HolidayConfiguration> Configurations { get; set; }
public DbSet<Holiday> Holidays { get; set; }

当我第一次运行PM > Update-Database -verbose时,它只创建了一个Employee表,这个表有CompanySectionManager_Id,它们不映射到任何地方,因为没有LineManager表。

对为什么会发生这种情况有什么解释吗?这是正确的吗?

2带继承的POCO's创建一个表而不是两个表

它必须是这样的,因为每个LineManager都是一个Employee,所以当你查询Employees时,你也在寻找LineManager。DbSet<Employee> Employees只匹配一个表,所以EF创建表的唯一方法是把LineManager中的所有字段都放进去。

有时候(当你有更多的继承时)EF会创建一个特殊的列来存放类名