DbSet不包含FirstOrDefault的定义?

时间:2015-09-29 23:23:53

标签: c# .net entity-framework linq

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

出于某种原因,任何时候我尝试访问DbSet(WhereFirstFirstOrDefault等)的任何函数时都会抛出错误:

  

错误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.DbSet 1'   (您是否缺少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);

和我的DbContext:

public partial class VIModel : DbContext
{
     ........
     public virtual DbSet<Customer> Customers { get; set; }
     ........
}

3 个答案:

答案 0 :(得分:9)

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>

答案 1 :(得分:2)

我遇到了同样的问题。 我尝试了以下解决方案来解决问题

  • 右键单击该项目。
  • 点击“Property Pages”。
  • 转到“构建”标签。
  • 设为“目标框架”4.5。
  • 尝试“构建”
  

我希望这个问题得到解决:)

答案 2 :(得分:-1)

这个问题已经有了答案,但是我有不同的原因。

在“ First”或“ Default”出现之前,我还需要引用系统...