3

我想从具有单个实体类的两个表中获取数据。如何??

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 将候选 ID 作为主键,表 2 将候选 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");
        });
     }
}`

在控制器操作中,我使用了以下 Linq to Entity Query

var data = db.homeViewModel.ToList();

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

4

3 回答 3

1

首先检查数据库表中的数据。
这是因为您可能在 table2 中没有相关数据。即table1主键值(即candidate_id)在table2外键candidateID中不存在...

于 2012-04-09T09:23:06.400 回答
1

如果您建议 Table2 仅包含 table1 的外键,但具有不同的主键,那么您不能真正按照您的要求进行操作。简单地持有一个外键意味着这是一对多的关系,并且没有办法将单个实体映射到这样的一对多关系(即使您的数据只包含一条记录,模型关系类型仍然是一对多)

如果您的意思是 Table2 的主键和外键为 Candidate_id(因此它是 1 对 1 映射),那么您可以使用此处描述的继承相当轻松地将它们映射到单个实体:

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 查询,我不会进入,因为我真的不知道您在这里寻找什么。

于 2012-04-09T08:24:12.373 回答
0

This is called entity splitting. To make it work your CandidateID must be primary key in both tables and foreign key in the second table (entity splitting works only with one-to-one relations in a database).

Edit: There is another limitation. Entity splitting doesn't allow optional relations. Records in both tables must exists to make this work so if your table2 records are optional you must map both tables separately and construct your view model in the application from loaded records.

于 2012-04-09T09:10:45.150 回答