2013-04-15 25 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創建一個特殊的列,在其中它放類名。

相關問題