我在MVC3应用程序中使用EF4,我正在寻找一种方法来查看给定工作组中的所有联系人。在我指定的控制器中:
var wg = from w in _repo.Workgroups.Include("Contact").ToList();
但是我收到以下错误:
'System.Linq.IQueryable'不包含'Include'的定义,也没有扩展方法'Include'接受类型为'System.Linq.IQueryable'的第一个参数'(你是否缺少using指令或汇编参考?)
我虽然这种方法是内置于EF4中的。我是否以某种方式启用它?
答案 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;