我有以下實體:EF代碼第一:非規範化繼承類型
Human -Name -Age -Height -Weight
SuperHuman : Human -SuperPower
EF只與Power屬性創建超人表,查詢時加入到人類表。我想要SuperHumans表中的所有列。
EF 4.1代碼首先可以進行配置嗎?
我有以下實體:EF代碼第一:非規範化繼承類型
Human -Name -Age -Height -Weight
SuperHuman : Human -SuperPower
EF只與Power屬性創建超人表,查詢時加入到人類表。我想要SuperHumans表中的所有列。
EF 4.1代碼首先可以進行配置嗎?
我只需要配置超人繼承的屬性映射,像這樣:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<SuperHuman>().Map(m => m.MapInheritedProperties());
{
做到這一點的一種方法是使關係成爲一種關係而不是一種關係。
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; }
}
}
注:這不是測試,未必是最好的解決辦法。我只是把它包括在這裏作爲一個可能的解
不會讓人的部分工作?如果這樣做不起作用,那麼只需查看每個層次表與每個表類型與每個具體表類型(TPH,TPT,TPC)的關係。您目前正在使用TPT並且您需要TPC。
我想要兩個不同的實體。 – chief7
哦,我明白了。然後放入部分並繼續使用TPT。我相信這應該做到。雖然,公平地說,自從我這樣做以來已經有一段時間了:P。讓我知道。 – OpticalDelusion
不幸的是,我有一個人類表。我不介意在應用程序中打破繼承。好建議。 – chief7
超人有一個人?這聽起來非人性化。 – therealmitchconnors