[英]EF Code First: Denormalize Inherited Type
我有以下实体:
Human -Name -Age -Height -Weight
SuperHuman : Human -SuperPower
EF将仅使用Power属性创建SuperHumans表,并在查询时联接到Humans表。 我想要SuperHumans表上的所有列。
可以将EF 4.1 Code First配置为执行此操作吗?
不会使人的局部工作? 如果那行不通,请查看“每个层次的表”,“每个类型的表”与“每个具体表”(TPH,TPT,TPC)。 您当前正在使用TPT,并且需要TPC。
一种方法是使关系具有Has-a关系而不是Is-a关系。
public class SuperHuman
{
public Human TheHuman { get; set; }
public string SuperPower { get; set; }
}
生成的数据库表应具有Human和SuperHuman的所有字段(只要您没有单独的Human表,在这种情况下,将创建一个单独的Human表,并添加外键以将这些表链接在一起)
它的用途有限,因为它破坏了继承。 您可能会找到更好的解决方案。
编辑:您可以做这样的事情:
public class SuperHuman : Human
{
public string Name
{
get { return base.Name; }
set { base.Name = value; }
}
}
注意:这未经测试,可能不是最佳解决方案。 我将其包括在这里只是一种可能的解决方案。
我只需要配置SuperHuman即可映射继承的属性,如下所示:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<SuperHuman>().Map(m => m.MapInheritedProperties());
{
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.