2013-01-18 76 views
2

我與子類型B和C.接着繼承鏈根A,我已經實體Ê這樣的:一個-2-酮關聯和繼承

public class E 
{ 
    public Guid Id {get; set;} 
    public B B {get; set;} 
    public C C {get; set;} 
} 

的導航屬性應該被映射到兩個一對一的協會,其中E是委託人,B,C是受撫養人。這將不起作用,因爲EF將使用E.Id的值作爲B和C的外鍵,這將在表A中產生一個重複的鍵。使用TPT,TPC或TPH無關緊要。

如果我將它映射二兩一個-2-many關聯,並在電子商務與映射使用不同的外鍵的,即:

Entity<E>().HasRequired(x=>x.B).WithMany().HasForeignKey(x=>x.BId); 
Entity<E>().HasRequired(x=>x.C).WithMany().HasForeignKey(x=>x.CId); 

比級聯刪除不會工作的方向是正確的。刪除e時應刪除E.B和E.C。

任何建議如何處理這個?

回答

0

EF每個關係需要一個映射列(繼承或關聯)。您將一列用於繼承,因此此列在關聯關係的子類中不可用(因爲您必須從子類中刪除它)。

你有兩個選擇:

  1. 您可以通過它鏈接到A(超)地圖E與B和C 1-1的關係。但這不是模型的準確表示,因爲{B,C}關係是E而不是A的。

  2. 向B和C添加另一列,用於與E的關聯。列應該是唯一的而不是空的 - 因爲實際上你正在創建另一個主鍵。現有主鍵和新列都唯一標識記錄(對於B或C)。在數據庫中,使用這個新列創建{B,C}和E之間的約束。現在EF將能夠代表繼承{A <-B,A <-C}和關聯{E-B,E-C}