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