Entity Framework Plus - FutureValue() в цикле foreach
Недавно я с большим успехом начал использовать EF+ в нашем проекте, однако иногда я сталкиваюсь с проблемой, что у меня есть набор сущностей, для которых мне нужно выполнить отдельный запрос.
Поэтому, если у меня есть набор из 20 клиентов, мне нужно выполнить 20 запросов отдельно. Интересно, есть ли способ, как избежать этого, используя EF+ FutureValue() как-то в цикле foreach.
Посмотрите этот пример кода:
foreach (var customer in customers)
{
customer.SomeValue = ctx.SomeDatabaseTable.Where(myCondition).FutureValue();
// this would run 20 times ... any way how to run all of the 20 queries at once?
}
1 ответ
Решение
Сначала вам нужно сгенерировать все запросы "QueryFuture", а затем использовать их.
Таким образом, два цикла должны сделать это работает.
var futureQueries = new List<BaseQueryFuture>();
// create all query futures
for(int i = 0; i < customers.Length; i++)
{
futureQueries.Add(ctx.SomeDatabaseTable.Where(myCondition).FutureValue());
}
// assign result (the first solved will make the call to the DB)
for(int i = 0; i < customers.Length; i++)
{
customer.SomeValue = ((QueryFutureValue<SomeValueType>)futureQueries[i]).Value;
}