Как я могу загрузить свойство навигации в коллекцию объектов EF 4.0 code first?

#.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 . Это всего лишь один круговой переход к базе данных.