Метод включения Linq-to-Entities не найден - PullRequest
23 голосов
/ 10 марта 2011

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

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

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

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

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

Ответы [ 4 ]

83 голосов
/ 13 сентября 2012

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

using System.Data.Entity;
15 голосов
/ 10 марта 2011

Да, метод встроен в 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 , где такие расширения уже доступны.

10 голосов
/ 30 марта 2013

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

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

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

0 голосов
/ 05 августа 2016

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

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

...