一个实体是否可能从两个表中获取数据?

本文关键字:两个 数据 获取 一个 实体 是否 | 更新日期: 2023-09-27 17:51:16

是否可能有一个实体从两个表中获取数据?

例如

Table1有列:Id, Name, Table2_Id

Table2有列:Id, FullName

我有一个实体的属性:Id, Name, FullName

我期望的是配置(流畅)实体框架来构建查询:

select t1.Id, t1.Name, t2.FullName
from Table1 t1 join Table2 t2 on t1.Table2_id = t2.Id

是否可能没有两个分离的实体和另一个合并两者的实体?

快速谷歌后,我发现如何将数据从表合并到一个实体。我需要像这样配置实体框架

modelBuilder.Entity<MyEntity>()
.Map( m => {
 m.Properties(x=> new { x.Id, x.Name });
 m.ToTable("Table1");
})
.Map( m => {
 m.Property(x=>x.FullName);
 m.ToTable("Table2");
});

但是如何告诉实体框架从Table1连接Table2_Id表,从Table2连接Id表。

我知道我可以创建视图和映射实体到视图,但如果可能的话,我想使用我所展示的场景

一个实体是否可能从两个表中获取数据?

是的,如果两个表中的ID相同,那么您可以将1:1映射映射到单个实体。

你也可以做Table Per Concrete Type继承,继承属性在一个表中,派生属性在另一个表中。

可以,但是首先你必须在数据库中创建一个视图。

:

>

create view my_view
as
select t1.Id, t1.Name, t2.FullName
from Table1 t1 join Table2 t2 on t1.Table2_id = t2.Id
  • 你必须在项目
  • 中创建一个模型

    :

    >

    public class my_view_model
    {
        public int Id{ get; set; }
        public string Name{ get; set; }
        public string FullName{ get; set; }
    }
    
  • 在context (DbContext)中添加模型
  • >

    public virtual DbSet<my_view_model> my_view_model{ get; set; }   
    
  • On Context, On OnModelCreating,添加如下:
  • >

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {           
        modelBuilder
           .Entity<my_view_model>(e =>
            {
                 e.HasNoKey();
                 e.ToView("my_view");
                 e.Property(v => v.Id).HasColumnName("Id");
                 e.Property(v => v.Name).HasColumnName("Name");
                 e.Property(v => v.FullName).HasColumnName("FullName");
            });
            base.OnModelCreating(modelBuilder);
    }