强制实体框架识别 TPT 继承结构

本文关键字:TPT 继承 结构 识别 框架 实体 | 更新日期: 2023-09-27 18:34:49

给定如下示例结构,实体框架不识别基本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 识别实体确实是基类?仅仅在迁移中定义用户具有实体的外键显然是不够的,因为它仍然不会创建该基础行。


奖励积分:我已经注意到我不能再往下走一步(即。 Employee : User(,但如果你想纠正我,我也会永远欠你的债。


更新:重现可在 github.com 上获得。

更新2:Gert Arnold关于无法映射泛型类从而破坏链的理论不幸产生了相同的迁移,其中User没有落入Entity

更新3:当用户正确映射时,我可以确认上面的"奖金"确实有效。当所有 3 个都是表时,Entity : User : Employee的继承结构都有效,当用户甚至无法映射回实体时,它显然不起作用,我认为这是 EF 中的一个错误。

强制实体框架识别 TPT 继承结构

您需要为希望 EntityFramework 为其添加表的每个类型添加一个 DbSet,如下所示:

public virtual DbSet<Entity> Entities { get; set; }
public virtual DbSet<User> Users { get; set; }