0

我有以下实体:EF代码第一:非规范化继承类型

Human 

-Name 

-Age 

-Height 

-Weight
SuperHuman : Human 

-SuperPower 

EF只与Power属性创建超人表,查询时加入到人类表。我想要SuperHumans表中的所有列。

EF 4.1代码首先可以进行配置吗?

回答

0

我只需要配置超人继承的属性映射,像这样:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<SuperHuman>().Map(m => m.MapInheritedProperties()); 
    { 
0

做到这一点的一种方法是使关系成为一种关系而不是一种关系。

public class SuperHuman 
{ 
    public Human TheHuman { get; set; } 
    public string SuperPower { get; set; } 
} 

产生的数据库表应该有人类和超人(只要你没有一个单独的人的表,在这种情况下一个单独的人表将被创建的各个领域,与外国键被加入以将表连接在一起。)

它在实用性上有限,因为它破坏了继承。您可能会找到更好的解决方案。


编辑:你可以做这样的事情:

public class SuperHuman : Human 
{ 
    public string Name 
    { 
     get { return base.Name; } 
     set { base.Name = value; } 
    } 
} 

注:这不是测试,未必是最好的解决办法。我只是把它包括在这里作为一个可能的解

+0

不幸的是,我有一个人类表。我不介意在应用程序中打破继承。好建议。 – chief7

+0

超人有一个人?这听起来非人性化。 – therealmitchconnors

1

不会让人的部分工作?如果这样做不起作用,那么只需查看每个层次表与每个表类型与每个具体表类型(TPH,TPT,TPC)的关系。您目前正在使用TPT并且您需要TPC。

+0

我想要两个不同的实体。 – chief7

+0

哦,我明白了。然后放入部分并继续使用TPT。我相信这应该做到。虽然,公平地说,自从我这样做以来已经有一段时间了:P。让我知道。 – OpticalDelusion