C# 实体框架继承映射(TPH)

C# 实体框架继承映射(TPH),c#,entity-framework,C#,Entity Framework,我正致力于将一个项目从nHibernate转换为实体框架,并一直在处理一个映射继承的映射问题 我有以下基类(为简洁起见缩短): 有人能告诉我如何为TaskStatus和ProjectStatus编写从Status继承的映射的正确方向吗?我想使用每个层次结构的表(使用鉴别器保存在一个表中)默认为每个层次结构的表。除了已有的设置之外,您不需要提供任何其他设置 这取自TPH示例,来自: 公共抽象类BillingDetail { public int BillingDetailId{get;set;}

我正致力于将一个项目从nHibernate转换为实体框架,并一直在处理一个映射继承的映射问题

我有以下基类(为简洁起见缩短):


有人能告诉我如何为
TaskStatus
ProjectStatus
编写从
Status
继承的映射的正确方向吗?我想使用每个层次结构的表(使用鉴别器保存在一个表中)

默认为每个层次结构的表。除了已有的设置之外,您不需要提供任何其他设置

这取自TPH示例,来自:

公共抽象类BillingDetail
{
public int BillingDetailId{get;set;}
公共字符串所有者{get;set;}
公共字符串编号{get;set;}
}
公共类银行账户:BillingDetail
{
公共字符串BankName{get;set;}
公共字符串Swift{get;set;}
}
公共类信用卡:BillingDetail
{
public int CardType{get;set;}
公共字符串ExpiryMonth{get;set;}
公共字符串ExpiryYear{get;set;}
}
公共类InheritanceMappingContext:DbContext
{
公共数据库集计费详细信息{get;set;}
}
这将创建一个名为BillingDetails的表,其中包含一个鉴别器列

鉴别器列

正如您在上面的DB模式中所看到的,代码首先必须添加一个特殊的 用于区分持久类的列:鉴别器。 这不是对象模型中持久类的属性; EF代码首先在内部使用它。默认情况下,列名为 “鉴别器”,其类型为字符串。这些值默认为 持久类名称-在本例中为“BankAccount”或“CreditCard”。 EF代码首先自动设置和检索鉴别器 价值观


谢谢这帮了大忙!
public abstract class Status
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class ProjectStatus : Status
{ 

}

public class TaskStatus : Status 
{

}
public abstract class BillingDetail 
{
    public int BillingDetailId { get; set; }
    public string Owner { get; set; }        
    public string Number { get; set; }
}

public class BankAccount : BillingDetail
{
    public string BankName { get; set; }
    public string Swift { get; set; }
}

public class CreditCard : BillingDetail
{
    public int CardType { get; set; }                
    public string ExpiryMonth { get; set; }
    public string ExpiryYear { get; set; }
}

public class InheritanceMappingContext : DbContext
{
    public DbSet<BillingDetail> BillingDetails { get; set; }
}