簡體   English   中英

強制實體框架識別TPT繼承結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM