是否可以让一个实体从两个表中获取数据?
例如。
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");
});
但是如何告诉实体框架加入来自Table2_Id
的{{1}}和来自Table1
的{{1}}的表格。
我知道我可以创建视图和地图实体来查看,但如果可能的话我想使用我提供的场景。
答案 0 :(得分:0)
是的,如果两个表中的ID相同,那么您可以将1:1映射映射到单个实体。
您还可以执行Table Per Concrete Type继承,其中继承的属性放在一个表中,派生属性放在另一个表中。
答案 1 :(得分:0)
是的,但是首先您必须在数据库中创建一个视图。
赞:
>
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; }
}
>
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);
}