給定下面的示例結構,實體框架無法識別基礎Entity
繼承,因此不會將其映射爲用戶和實體之間的TPT繼承。強制實體框架識別TPT繼承結構
// Where DbSet<User> Users { get; set; } is used
public class User : User<int> { }
public class User<TTest> : Entity {
public TTest Whatever { get; set; }
}
public abstract class Entity {
public int EntityId { get; set; }
}
我相信這是因爲EF只會看第一級繼承結構和永遠看不到Entity
作爲基類,只是它有它的特性。
所以我的問題是,我如何強制EF認識到該實體確實是基類?只是在遷移中定義該用戶具有ForeignKey to Entity顯然是不夠的,因爲它仍然不會創建該基礎行。
加分點:我已經注意到,我不能去另一個層次了,但如果你想糾正我的,我會感激你永遠(即
Employee : User
。)也。
更新:攝製available here on github.com。
UPDATE2:格特阿諾德的有關無法映射泛型類,從而打破鏈理論不幸產生相同的遷移,其中User
沒有通過降至Entity
。
Update3:我可以確認,當用戶地圖正確時,上面的「紅利」確實有效。 Entity : User : Employee
的繼承結構在所有3個表都適用時,當用戶甚至不能映射回實體時,它顯然不工作,我相信現在它是EF中的一個錯誤。
的問題是,EF無法映射像'用戶泛型類'。 –
@GertArnold我不想這樣做,這就是爲什麼我有'用戶'。 –
是的,但'用戶'位於'Entity'和'User'之間,因此對於EF,如果要將其映射爲TPT,則會中斷繼承鏈。 –