2013-04-15 26 views
0

我为假日系统创建了一个相当简单的Database2继承的POCO创建一个表而不是两个

实体

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不映射到任何地方看到,因为有ISN” t一个LineManager表。

为什么会发生这种情况的任何解释?它是否正确?

+0

您正在使用默认值。分配表名(属性或流利表示法)。 –

+0

您正在使用继承。你发现的特征不是问题。但是,可能存在的问题是您的POCO模型不支持将Employee更改为LineManager或不成为LineManager。 –

+0

@TomBlodget所以在这种情况下,将标准化降低到一个级别并且在员工中拥有“IsLineManager”属性和“CompanySection”属性会更好吗? – LukeHennerley

回答

1

它必须是这样的,因为每个LineManager都是一个Employee,所以当您查询Employees时,您还在寻找LineManager。 DbSet<Employee> Employees只匹配一个表,因此EF如何创建表的唯一方法是将LineManager中的所有字段放入其中。

有时(当你有更多的无情)EF创建一个特殊的列,在其中它放类名。

相关问题