DbSet不包含FirstOrDefault的定义

本文关键字:定义 FirstOrDefault 包含 DbSet | 更新日期: 2023-09-27 18:15:04

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

由于某种原因,每当我试图访问DbSet (Where, First, FirstOrDefault等)的任何函数时,它都会抛出错误:

找到错误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的引用。核心项目,但我仍然得到的错误。System有一个using语句。Linq,但不支持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; }
     ........
}

DbSet不包含FirstOrDefault的定义

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

名称空间:系统。Linq
组装:系统。Core(在System.Core.dll中)

你需要在你的项目中有一个System.Core的引用,在你试图使用它的文件中,using System.Linq;

如果你有这两件事,仔细检查你的项目或你引用的一些项目没有创建自己的System.Data.Entity.DbSet<T>类,不实现IQueryable<T>IEnumerable<T>

我也有同样的问题。我尝试了以下方法来解决这个问题

    右键单击项目。
  • 点击"属性页"。
  • 转到"Build"选项卡。
  • 设置为"目标框架"
  • 尝试"构建"

我希望这是解决:)

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

我还需要在First或Default显示之前有一个对System的引用…