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