强制实体框架识别 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 中的一个错误。
您需要为希望 EntityFramework 为其添加表的每个类型添加一个 DbSet,如下所示:
public virtual DbSet<Entity> Entities { get; set; }
public virtual DbSet<User> Users { get; set; }