实体框架代码优先TPH继承与通用存储库



我可能误解了代码优先的按层次表继承,但这是我的设置:我有HTMLGadgets(和其他类型)继承自Gadget, Gadget继承自Entity。Entity只有一个属性Id,因此我可以在通用存储库中使用它,例如本教程。

public abstract class Entity {
    [Key]
    public int Id { get; set; }
}   
public abstract class Gadget : Entity {       
    public string Content { get; set; }
}
public class HTMLGadget : Gadget
{
    public string SomeProperty { get; set;}
}

为了实现TPH继承,我在我的上下文中这样做:

public DbSet<Gadget> Gadgets { get; set; }

我希望所有东西都使用基Id,所以所有东西都是实体。但是我如何让它参与到代码优先继承中呢?我可以看到问题:如果我将上下文更改为

public DbSet<Entity> Entities{ get; set; }

它可能工作,但我将在一个层次结构表中拥有所有内容(将有更多的表而不是小工具)!但是我看不出我如何才能让我的EF POCO类在gadget上"底出",但仍然让gadget使用基本实体Id属性,这样它们就可以在通用存储库中使用。有人能帮忙吗?——

您不必映射Entity类。引入DbSet<Entity>将映射Entity类。如果要在一个表中存放不同类型的gadget,那么映射Gadget和其他子类。

在Entity的类中声明的属性将被EF用来映射子类。

最新更新