如何使用多个表映射单个实体

我想从单个Entity类的两个表中获取数据。 怎么样??

public class HomeViewModel { [Key] [Column("candidate_ID")] public int candidateID { get; set; } [Column("first_name")] public string firstName { get; set; } [Column("last_name")] public string lastName { get; set; } public string emailID { get; set; } public string mb_country_code { get; set; } public int mobile_no { get; set; } } 

上面的实体类包含6个属性,其中3个属性表示一个table1,3个表示table2。 在数据库表1中,将candidate_id保持为主键,而表2将candidate_id保持为外键

更新:我做的是添加DBContext类

 public class EmployeeMonitoring : DbContext { public DbSet homeViewModel { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity().Map(m => { m.Properties(a => new { a.candidateID, a.firstName, a.lastName,a.status }); m.ToTable("table1"); }).Map(m => { m.Properties(c => new { c.candidateID,c.emailID, c.mobile_no, c.mb_country_code }); m.ToTable("table2"); }); } }` 

在Controller Action中,我使用了Linq to Entity Query

 var data = db.homeViewModel.ToList(); 

但它什么都不返回,即0计数。

如果你建议Table2只持有table1的外键,但是有一个不同的主键,那么你就无法真正做到你所要求的。 简单地持有一个foriegn键就意味着它是一对多的关系,并且没有办法将一个实体映射到一对多的关系(即使你的数据只包含一个记录,模型关系类型仍然是一对多)

如果您的意思是Table2具有candidate_id的主键和外键(因此它是1对1映射),那么您可以使用此处描述的inheritance相当容易地将它们映射到单个实体中:

http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt。 ASPX

如果你想要的只是创建一个包含来自两个表的数据的单个对象,那么这是一个相对简单的linq查询,我不会深入研究,因为我真的不知道你在这里想要什么。

首先检查daatbase表中的数据。
这是因为你可能没有table2中的相关数据。 即table1主键值(即candidate_id)不存在于table2外键候选ID中…

这称为实体拆分。 为了使它工作,您的CandidateID必须是第二个表中的主键和第二个表中的外键(实体拆分仅适用于数据库中的一对一关系)。

编辑:还有另一个限制。 实体拆分不允许可选关系。 必须存在两个表中的记录才能使其正常工作,因此如果table2记录是可选的,则必须单独映射两个表,并从加载的记录中构建应用程序中的视图模型。