#.net #asp.net-mvc-3 #entity-framework-4
#.net #asp.net-mvc-3 #entity-framework-4
Вопрос:
Я использую EF 4.0 с Code First, и у меня есть объект Product, который имеет свойство навигации ProductSpecificationAttributes. У меня есть список объектов продукта, я перечисляю продукты, и я хотел бы, чтобы для всех продуктов в этом списке загружались атрибуты ProductSpecificationAttributes, без необходимости обращаться к базе данных для каждого продукта в списке. Итак, если у меня есть:
IList<Product> products = DbContext.ExecuteStoredProcedureList<Product>(
"ProductLoadAllPaged", parameters here);
Я хотел бы сделать что-то вроде этого:
IQueryable<Product> query = products.AsQueryable().Include(
x => x.ProductSpecificationAttributes);
Есть ли автоматический способ сделать это в EF 4.0 Code First без необходимости запрашивать базу данных для каждого продукта при попытке получить его атрибуты ProductSpecificationAttributes?
Мы будем очень признательны за вашу помощь!
Спасибо
Ответ №1:
Я вижу только что-то вроде запроса продуктов по их идентификатору, включая коллекцию навигации:
IQueryable<Product> query = context.Products
.Include(p => p.ProductSpecificationAttributes)
.Where(p => products.Select(p1 => p1.Id).Contains(p.Id));
products.Select(p1 => p1.Id)
это коллекция идентификаторов в памяти, и запрос преобразуется в предложение SQL IN
. Это всего лишь один круговой переход к базе данных.