实体框架代码优先 TPH 继承与通用存储库
我可能误解了 code-first table-per-hierarchy 继承,但这是我的设置:我有 HTMLGadgets(和其他类型)继承自 Gadget,而 Gadget 继承自 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 类在小工具中“触底”,但仍然让小工具使用基本实体 Id 属性,以便它们可以在通用存储库中使用。有人可以帮忙吗?-
I'm probably misunderstanding code-first table-per-hierarchy inheritance, but this is my set-up: I have HTMLGadgets (and other types) inheriting from Gadget, which inherits from Entity. Entity has one property, Id, so I can use it in a generic repository, à la this tutorial.
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;}
}
To implement TPH inheritance I have this in my context:
public DbSet<Gadget> Gadgets { get; set; }
So, I want everything to use the base Id, so everything is an Entity. But how do I get that to participate in code first inheritance? I can see the problem: if I change the context to have
public DbSet<Entity> Entities{ get; set; }
it might work, but I'd have everything (there will be more tables other than gadgets) in one hierarchy table! But I can't see how I can get my EF POCO classes to 'bottom-out' at Gadgets, yet still have Gadgets use the base Entity Id property so they can be used in the generic repository. Can anyone help?-
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不必映射
Entity
类。引入DbSet
将映射Entity
类。如果您要将不同类型的小工具放在一个表中,请映射Gadget
和其他子类。EF 将使用 Entity` 类中声明的属性来映射子类。
You do not have to map
Entity
class. IntroducingDbSet<Entity>
will mapEntity
class. If you are going to sore different types of Gadgets in a single table, then map theGadget
and other sub classes.The properties declared in Entity` class will be used by EF to map the sub classes.