繁体   English   中英

实体框架继承映射(TPH)

[英]Entity Framework Inheritance Mapping (TPH)

我正在努力将项目从nHibernate转换为Entity Framework,并坚持使用映射继承的映射问题。

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

public abstract class Status
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class ProjectStatus : Status
{ 

}

public class TaskStatus : Status 
{

}

有人能指出我正确的方向,如何编写TaskStatusProjectStatus的映射来继承Status 我想使用table-per-hierarchy(所有使用Discriminator保存在一个表中)

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

这取自weblogs.asp.net的TPH示例:

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; }
}

这将创建一个名为BillingDetails的表,其中包含一个鉴别器列。

鉴别列

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM