实体框架 - 在一个请求中通过多个导航属性加载实体

时间:2016-01-18 12:03:52

标签: c# sql entity-framework linq

大家下午好!我有一个新问题:假设我的数据库中有以下实体:

public class Entity1
{
public virtual Entity2 Navigation1 {get;set;}
public virtual Entity3 Navigation2 {get; set;}
......
}

我需要执行以下查询:

SELECT * FROM Entity1 ent1
join Entity2 as ent2 on ent2.Id = ent1.Entity2Id
join Entity3 as ent3 on ent3.Id = ent1.Entity3Id

如果我这样编码:

context.Entry(ent1).Reference(rep=>rep.Navigation1).Load();
context.Entry(ent1).Reference(rep=>rep.Navigation2).Load();

实体框架将执行2个查询。我该如何重写代码,以便框架只对数据库执行一次调用?

1 个答案:

答案 0 :(得分:1)

您想要使用导航属性。

例如:

IQueryable<Entity1> query = DBContext.Set<Entity1>()
    .Include(x => x.Navigation1)
    .Include(x => x.Navigation2);

IList<Entity1> mylist = query.ToList();
然后,

mylist将包含您的实体,其属性设置与您关联的实体匹配。