繁体   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