0

我有以下實體:EF代碼第一:非規範化繼承類型

Human 

-Name 

-Age 

-Height 

-Weight
SuperHuman : Human 

-SuperPower 

EF只與Power屬性創建超人表,查詢時加入到人類表。我想要SuperHumans表中的所有列。

EF 4.1代碼首先可以進行配置嗎?

回答

0

我只需要配置超人繼承的屬性映射,像這樣:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<SuperHuman>().Map(m => m.MapInheritedProperties()); 
    { 
0

做到這一點的一種方法是使關係成爲一種關係而不是一種關係。

public class SuperHuman 
{ 
    public Human TheHuman { get; set; } 
    public string SuperPower { get; set; } 
} 

產生的數據庫表應該有人類和超人(只要你沒有一個單獨的人的表,在這種情況下一個單獨的人表將被創建的各個領域,與外國鍵被加入以將表連接在一起。)

它在實用性上有限,因爲它破壞了繼承。您可能會找到更好的解決方案。


編輯:你可以做這樣的事情:

public class SuperHuman : Human 
{ 
    public string Name 
    { 
     get { return base.Name; } 
     set { base.Name = value; } 
    } 
} 

注:這不是測試,未必是最好的解決辦法。我只是把它包括在這裏作爲一個可能的解

+0

不幸的是,我有一個人類表。我不介意在應用程序中打破繼承。好建議。 – chief7

+0

超人有一個人?這聽起來非人性化。 – therealmitchconnors

1

不會讓人的部分工作?如果這樣做不起作用,那麼只需查看每個層次表與每個表類型與每個具體表類型(TPH,TPT,TPC)的關係。您目前正在使用TPT並且您需要TPC。

+0

我想要兩個不同的實體。 – chief7

+0

哦,我明白了。然後放入部分並繼續使用TPT。我相信這應該做到。雖然,公平地說,自從我這樣做以來已經有一段時間了:P。讓我知道。 – OpticalDelusion