【问题标题】:Entity Framework Code First TPH Inheritance with Generic Repository具有通用存储库的实体框架代码优先 TPH 继承
【发布时间】:2011-10-05 04:08:18
【问题描述】:

我可能误解了 code-first table-per-hierarchy 继承,但这是我的设置:我有 HTMLGadgets(和其他类型)继承自 Gadget,它继承自 Entity。实体有一个属性,Id,所以我可以在通用存储库中使用它,就像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;}
}

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

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

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

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

它可能会起作用,但我会在一个层次结构表中包含所有内容(除了小工具之外还会有更多表)!但是我看不到如何让我的 EF POCO 类在小工具中“自下而上”,但仍然让小工具使用基本实体 ID 属性,以便它们可以在通用存储库中使用。谁能帮忙?-

【问题讨论】:

    标签: inheritance c#-4.0 repository ef-code-first single-table-inheritance


    【解决方案1】:

    您不必映射Entity 类。引入DbSet&lt;Entity&gt; 将映射Entity 类。如果您要在单个表中处理不同类型的小工具,请映射 Gadget 和其他子类。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      相关资源
      最近更新 更多