一个实体是否可能从两个表中获取数据?
本文关键字:两个 数据 获取 一个 实体 是否 | 更新日期: 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
- 你必须在项目 中创建一个模型
- 在context (DbContext)中添加模型
- On Context, On OnModelCreating,添加如下:
:
>
public class my_view_model
{
public int Id{ get; set; }
public string Name{ get; set; }
public string FullName{ get; set; }
}
>
public virtual DbSet<my_view_model> my_view_model{ get; set; }
>
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);
}