Linq-to-Entities Include方法未找到

时间:2011-03-10 07:30:01

标签: entity-framework-4 linq-to-entities

我在MVC3应用程序中使用EF4,我正在寻找一种方法来查看给定工作组中的所有联系人。在我指定的控制器中:

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

但是我收到以下错误:

  

'System.Linq.IQueryable'不包含'Include'的定义,也没有扩展方法'Include'接受类型为'System.Linq.IQueryable'的第一个参数'(你是否缺少using指令或汇编参考?)

我虽然这种方法是内置于EF4中的。我是否以某种方式启用它?

5 个答案:

答案 0 :(得分:83)

我也收到了这个错误并通过添加以下引用来解决它:

using System.Data.Entity;

答案 1 :(得分:15)

是的,该方法已构建到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 :(得分:10)

布鲁斯希尔的回答是完全正确的。

为了扩展他的答案,Include方法是System.Data.Entity命名空间中的扩展方法。

它不会影响您如何使用它们,但Include方法实际上是在名为DbExtensions的静态类中定义的。在msdn.microsoft.com,您会看到它们在那里记录,而不是在System.Linq.IQueryable下,这使得它们更难找到。

答案 3 :(得分:0)

如果此问题来自存储过程,请确保SP正常工作。

实体框架将尝试从存储过程中预测返回值的类型,如果SP由于其中的无效表名或列而无法工作,则返回一个整数,并且实体框架创建一个期望整数的概念模式作为返回值而不是表。

答案 4 :(得分:0)

我也遇到了这个问题,并通过添加以下参考在asp.net core 3.0项目中解决了该问题:

using Microsoft.EntityFrameworkCore;