Подтвердить что ты не робот

Linq-to-Entities Include method not found

Я использую EF4 в приложении MVC3, и я искал способ просмотра всех моих контактов в данной рабочей группе. В контроллере я указал:

var wg = from w in _repo.Workgroups.Include("Contact").ToList();

но я получаю следующую ошибку:

'System.Linq.IQueryable' не содержит определения для "Include" и не может быть найден метод расширения "Include", принимающий первый аргумент типа "System.Linq.IQueryable" (вам не хватает директивы using или ссылка на сборку?)

Хотя этот метод был встроен в EF4. Должен ли я включить его каким-то образом?

4b9b3361

Ответ 1

Да, метод встроен в EF, но он недоступен в интерфейсе IQueryable. Он доступен на ObjectQuery. Если вы хотите называть его IQueryable, вы должны создать собственное расширение, которое преобразует текущий запрос в ObjectQuery и выполнит Include. Что-то вроде:

public static IQueryable<T> Include<T>(this IQueryable<T> query, string property)
{
  var objectQuery = query as ObjectQuery<T>;
  if (objectQuery == null)
  {
    throw new NotSupportedException("Include can be called only on ObjectQuery");
  }

  return objectQuery.Include(property);
}

Или вы должны использовать Entity Framework Feature CTP5, где такие расширения уже доступны.

Ответ 2

Я также получил эту ошибку и разрешил ее, добавив следующую ссылку:

using System.Data.Entity;

Ответ 3

Ответ Брюса Хилла абсолютно прав.

Чтобы немного расширить свой ответ, методы Include являются методами расширения в пространстве имен System.Data.Entity.

Это не влияет на то, как вы их используете, но методы Include на самом деле определены в статическом классе с именем DbExtensions. На msdn.microsoft.com вы увидите, что они задокументированы там, а не в System.Linq.IQueryable, что делает их немного сложнее найти.

Ответ 4

Если эта проблема исходит из хранимой процедуры, убедитесь, что SP работает нормально.

Entity Framework попытается предсказать тип возвращаемого значения из хранимой процедуры, и если SP не работает из-за недопустимого имени таблицы или столбца внутри него, он возвращает Integer, а Entity Framework создает концептуальную схему, ожидающую целое число как возвращаемое значение вместо таблицы.