如何在EF中使用抽象类

Aga*_*hii -3 entity-framework

我有一个DbContext类

abstract public class CostCenter
{

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

    abstract public string CostCenterName
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*oon 5

你应该从派生新类CostCenter并添加派生类作为DbSetDbContext

例子:

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

}
Run Code Online (Sandbox Code Playgroud)

和:

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

}
Run Code Online (Sandbox Code Playgroud)

并且,在您的DbContext上:

DbSet<SomeCostCenter> { get; set; }
DbSet<AnotherCostCenter> { get; set; }
Run Code Online (Sandbox Code Playgroud)

请注意,将它们设置为使用“每类型表(TPT)”继承来将每个派生类型存储在单独的表中。还有其他选项,例如逐层表(TPH)或逐表类(TPC)。您可以搜索这些术语中的每一个,以确定哪种方案最适合您的情况。

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