使用一个DBContext仅连接一次数据库,在Entity Framework中执行多个Linq To Entity查询

7

我正在尝试使用Entity Framework 6从SQL Server数据库返回两个结果集。我想通过运行两个Linq to Entity查询来尝试,使用一个单独的DBContext。我的问题是,使用单个DBContext是否只会有一次数据库连接请求。我认为是这样,但我不确定。

class RequestRefLists
{
  public List<Employee> EmployeeList {get;set;}
  public List<Dept> DeptList {get;set;}
}

    public RequestRefLists GetRequestRefLists()
   {
    RequestRefLists ReqRefLists = new RequestRefLists();

    using(var context= new BusinessDBContext())
    { 
      var queryResult1 = from e in context.Employees
      select e;
      ReqRefLists.EmployeeList = (List<Employee>)queryResult1.ToList();

      var queryResult2 = from d in context.Departments
      select d;
      ReqRefLists.DeptList = (List<Dept>)queryResult2.ToList();
    }
    return ReqRefLists;
   }

一个简单的查看已执行的SQL语句就可以回答你的问题。 - Gert Arnold
1个回答

8
你可以使用Entity Framework 扩展库
有一个名为Future queries的特性。
class RequestRefLists
{
    public List<Employee> EmployeeList {get;set;}
    public List<Dept> DeptList {get;set;}
}

public RequestRefLists GetRequestRefLists()
{
    RequestRefLists ReqRefLists = new RequestRefLists();

    using(var context= new BusinessDBContext)
    { 
        var queryResult1 = from e in context.Employees
        select e;
        ReqRefLists.EmployeeList = queryResult1.Future();

        var queryResult2 = from d in context.Departments
        select d;
        ReqRefLists.DeptList = queryResult2.Future();        
    }
    return ReqRefLists;
}

你的查询将在任何集合的第一次枚举时进行延迟执行。
ExecuteFutureQueries从所有存储的IFutureQuery对象构建批量查询。最终,所有IFutureQuery对象都将使用查询结果进行更新。

当使用同一个DbContext对象进行多个LINQ查询时,实体框架只会对数据库进行一次访问。 - Sundar Singh
@SundarSingh和Future()正是这样做的。 - Vadim Martynov
如果我理解正确的话,似乎你可以在单个dbcontext中堆叠查询,每个查询在赋值点处都带有.Future。在我的情况下,那就是我想要在自定义类中加载特定列表的地方。在定义了所有查询之后,我只需枚举其中一个查询,所有对我的类实例的赋值都应该在单个数据库连接中执行。我会测试这个功能。我正在尝试从表格中加载UI的所有查找列表。我想知道这些扩展是否是Entity Framework的正式部分。谢谢Vadim。 - Robertcode
没有内置机制可以将多个查询组合成一个批处理。这就是EF Extended Library存在的原因。为什么不想包含1个NuGet包呢? - Vadim Martynov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接