我可能误解了代码优先的按层次表继承,但这是我的设置:我有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用来映射子类。