Предположим, у меня есть коллекция (произвольного размера) IQueryable<MyEntity>
(все для одного типа MyEntity
).Каждый отдельный запрос был успешно создан для инкапсуляции различных фрагментов бизнес-логики в форму, которая может быть оценена за одно обращение к базе данных.Есть ли способ, которым я теперь могу иметь все эти IQueryable
s, выполненные за однократное прохождение в базу данных?
Например (упрощенно; мой фактическийзапросы более сложные!), если бы у меня было
ObjectContext context = ...;
var myQueries = new[] {
context.Widgets.Where(w => w.Price > 500),
context.Widgets.Where(w => w.Colour == 5),
context.Widgets.Where(w => w.Supplier.Name.StartsWith("Foo"))
};
, я бы хотел, чтобы EF выполнял перевод каждого запроса (который он может выполнять индивидуально), затем за одно посещение базы данных выполните
SELECT * FROM Widget WHERE Price > 500
SELECT * FROM Widget WHERE Colour = 5
SELECT W.* FROM Widget
INNER JOIN SUpplier ON Widget.SupplierId = Supplier.Id
WHERE Supplier.Name LIKE 'Foo%'
, затем преобразуйте каждый набор результатов в IEnumerable<Widget>
, обновив ObjectContext
обычным способом.
Я видел различные сообщения о работе с несколькими наборами результатовиз хранимой процедуры , но это немного отличается (не в последнюю очередь потому, что я не знаю во время компиляции, сколько будет наборов результатов).Есть ли простой способ, или я должен использовать что-то вроде Поддерживает ли Entity Framework возможность иметь одну хранимую процедуру, которая возвращает несколько наборов результатов? ?