我的问题与foreach 循环中的 Entity Framework Plus - FutureValue()非常相似。
我有这个代码:
public class CustomerService
{
private readonly EntityContext Context = new EntityContext();
private IQueryable<Customer> MakeQuery(object query)
{
return this.Context.Customers
// Omitted more logic here to create a complex query.
.AsQueryable();
}
public List<List<Customer>> GetCustomersBulk(List<object> queries)
{
var response = new List<List<Customer>>();
var futureQueries = new List<QueryFutureEnumerable<Customer>>();
foreach (var query in queries)
{
futureQueries.Add(
this.MakeQuery(query: query)
.Future()
);
}
foreach (var futureQuery in futureQueries)
{
response.Add(futureQuery.ToList());
}
return response;
}
}
完全工作的小提琴:https ://dotnetfiddle.net/vg8pjA
但是,使用Futures
似乎实际上比不使用它们要慢。
如果我尝试使用相关问题的答案,如 using FutureValue
,我的查询将只返回 1 个客户而不是其中的许多。我认为使用该代码,查询在一次 DB 行程中运行,但结果不是我想要的。
我尝试使用.FutureValue<IEnumerable<Customer>>()
,但随后出现此错误:
Error CS1929 'IQueryable<Customer>' does not contain a definition for 'FutureValue' and the best extension method overload 'QueryFutureExtensions.FutureValue<IEnumerable<Customer>>(IQueryable<IEnumerable<Customer>>)' requires a receiver of type 'IQueryable<IEnumerable<Customer>>'
注意我使用的是Z.EntityFramework.Plus.EFCore
版本2.0.60
。