[英]Force Entity Framework to recognise a TPT Inheritance Structure
給定以下示例結構,實體框架無法識別基本Entity
繼承,因此不會將其映射為用戶和實體之間的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承認Entity確實是基類? 僅定義用戶在遷移中具有外鍵到實體顯然是不夠的,因為它仍然不會創建該基礎行。
獎勵積分:我已經指出,我不能再降低一個層次(即
Employee : User
),但是如果您想對此進行糾正,那么我也將永遠背負債務。
更新 :Repro 在github.com上可用 。
Update2: Gert Arnold關於無法映射泛型類並因此打破鏈的理論不幸地產生了相同的遷移,其中User
沒有陷入Entity
。
Update3:我可以確認,當用戶正確映射時,上面被剔除的“獎勵”確實可以正常工作。 Entity : User : Employee
的繼承結構在所有3個都是表時都起作用,當User甚至不能映射回Entity時,它顯然不起作用,我現在認為這是EF中的錯誤。
您需要為要EntityFramework添加表的每種類型添加一個DbSet,如下所示:
public virtual DbSet<Entity> Entities { get; set; }
public virtual DbSet<User> Users { get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.