我想从两个具有单个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> homeViewModel { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<HomeViewModel>().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计数。
答案 0 :(得分:1)
如果你建议Table2只持有table1的外键,但是有一个不同的主键,那么你就无法真正做到你所要求的。简单地持一个foriegn键意味着这是一对多的关系,并且没有办法将一个实体映射到一对多的关系(即使你的数据只包含一个记录,模型关系类型仍然是一对多)
如果您的意思是Table2具有candidate_id的主键和外键(因此它是1对1的映射),那么您可以使用此处描述的继承,相当容易地将它们映射到单个实体中:
如果你想要的只是创建一个包含来自两个表的数据的单个对象,那么这是一个相对简单的linq查询,我不会进入,因为我真的不知道你在这里想要什么
答案 1 :(得分:1)
首先检查daatbase表中的数据。
这是因为你可能没有table2中的相关数据。即table1主键值(即candidate_id)不存在于table2外键candidateID ...
答案 2 :(得分:0)
这称为实体拆分。要使其工作,CandidateID
必须是第二个表中的主键和第二个表中的外键(实体拆分仅适用于数据库中的一对一关系)。
编辑:还有另一个限制。实体拆分不允许可选关系。两个表中的记录必须存在才能使其正常工作,因此如果table2记录是可选的,则必须单独映射两个表,并从加载的记录中构建应用程序中的视图模型。