如何在EF中使用抽象类

时间:2016-05-21 12:40:18

标签: entity-framework

我有一个类似

的DbContext类
abstract public class CostCenter
{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    abstract public Guid ID
    {
        get;
        set;
    }

    abstract public string CostCenterName
    {
        get;
        set;
    }
}

但是我无法运行add-migration和update-database命令它给我错误,注意抽象类是我的需要,

1 个答案:

答案 0 :(得分:5)

您应该从CostCenter派生一个新类,并将派生类作为DbSet添加到DbContext

示例:

[Table("SomeCostCenter")]
public class SomeCostCenter : CostCenter
{

}

[Table("AnotherCostCenter")]
public class AnotherCostCenter : CostCenter
{

}

并且,在你的DbContext上:

DbSet<SomeCostCenter> { get; set; }
DbSet<AnotherCostCenter> { get; set; }

请注意,这些设置为使用Table-Per-Type(TPT)继承将每个派生类型存储在单独的表中。还有其他选项,例如Table-Per-Hierarchy(TPH)或Table-Per-Concrete类(TPC)。您可以搜索这些术语中的每一个,以确定哪种方法最适合您的方案。

这可能值得快速阅读: http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph