DbSet不包含FirstOrDefault的定义?

Abe*_*ler 6 .net c# linq entity-framework

我最近将一个现有项目迁移到.net 4.5,并更改了该项目用于数据访问的内容(切换到实体框架).

出于某种原因,任何时候,我尝试访问任何功能,适用于DbSet( ,,Where 等),它抛出的错误:FirstFirstOrDefault

错误53'System.Data.Entity.DbSet 1<MyProject.Data.Customer>' does not contain a definition for 'FirstOrDefault' and no extension method 'FirstOrDefault' accepting a first argument of type 'System.Data.Entity.DbSet1'可以找到(您是否缺少using指令或程序集引用?

这使用.net 4.5,我读到这些函数不再在System.Linq中,但现在存储在System.Core中.我已经向项目添加了对System.Core的引用,但我仍然收到错误.System.Linq有一个using语句,但System.Core没有.

谁能明白为什么我会收到这个错误?关于如何修复的建议?

更新:

这是抛出错误的行:

VIModel Db = new VIModel();
Customer = Db.Customers.FirstOrDefault(c => c.CustomerId == CustomerId && c.IsPrimary);
Run Code Online (Sandbox Code Playgroud)

和我的DbContext:

public partial class VIModel : DbContext
{
     ........
     public virtual DbSet<Customer> Customers { get; set; }
     ........
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*ain 12

用于Queryable(添加FirstOrDefault你正在使用的扩展方法的东西)的程序集在System.Core,但是它的命名空间是System.Linq,你可以在它的MSDN页面上看到它

命名空间: System.Linq
程序集: System.Core(在System.Core.dll中)

你需要在你的项目System.Core中对你正在尝试使用它的文件进行参考using System.Linq;

如果你有这两件事,请仔细检查你的项目或你正在进行的某个项目没有创建它自己的System.Data.Entity.DbSet<T>类,它没有实现IQueryable<T>IEnumerable<T>.