[英]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
{
}
有人能指出我正确的方向,如何编写TaskStatus
和ProjectStatus
的映射来继承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.