如何绘制多台单一的实体(How map single entity with multiple ta

2019-06-25 07:54发布

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

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代表一个表1和图3表示表2。 在数据库中的表1保持candidate_id作为主键和表中的两个拥有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");
        });
     }
}`

并在控制器动作,我用下面的LINQ到实体查询

var data = db.homeViewModel.ToList();

但它没有返回值,即0计数。

Answer 1:

如果您提示表2只持有外键表1,但有不同的主键,那么你真的不能做什么你问。 简单地举行,这是一个一对多的关系foriegn重要手段,而且也没有办法跨越一个单一的实体映射到这样的(即使你的数据只包含一个记录,模型关系类型仍然是一对多)一对多的关系

如果你的意思是表2具有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查询,我不会进入,因为我真的不知道你在寻找什么在这里。



Answer 2:

在daatbase表先检查数据。
那是因为你可能没有在表2的相关数据。 即表1主键值(这是candidate_id)不存在于表2外键candidateID ...



Answer 3:

这就是所谓的实体分裂。 为了让你的工作CandidateID必须在第二个表表和外键的主键(实体分裂只能与一个一对一关系工作在数据库中)。

编辑:有是另一个限制。 实体分裂不允许可选的关系。 两个表中的记录必须存在,使这项工作,所以如果你的表2的记录是可选的,你必须在两个单独的表映射和构建您的视图模型,从加载的记录应用程序。



文章来源: How map single entity with multiple table