【问题标题】:DbSet doesn't contain definition for FirstOrDefault?DbSet 不包含 FirstOrDefault 的定义?
【发布时间】:2015-09-29 23:23:53
【问题描述】:

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

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

可以找到错误 53“System.Data.Entity.DbSet1<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);

还有我的 DbContext:

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

【问题讨论】:

  • MSDN 和我的对象浏览器(在 .NET 4.5 项目中)说命名空间是 System.Linq,它驻留在 System.Core.dll 中。

标签: c# .net entity-framework linq


【解决方案1】:

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

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

您需要在您的项目中引用System.Core,并在您尝试使用它的文件中引用using System.Linq;

如果您有这两个方面,请仔细检查您的项目或您正在引用的某个项目没有创建它自己的 System.Data.Entity.DbSet&lt;T&gt; 类,该类未实现 IQueryable&lt;T&gt;IEnumerable&lt;T&gt;

【讨论】:

  • 我确实有您描述的设置(参考.Coreusing .Linq)但错误仍然出现。我四处寻找DbSet&lt;T&gt; 的其他实现,但什么都没有。我的 DbContext 确实定义了一堆成员,例如:public virtual DbSet&lt;Address&gt; Addresses { get; set; } 其中 Address 是我的数据库中的一个表,但仅此而已。你能想到其他值得检查的地方吗?
  • 您能否更新您的问题以包含导致错误发生的代码行。
  • 当然 - 实际上有大约 500 个错误,因为每当我尝试使用 System.Linq 中定义的函数时都会抛出它。我在更新中发布了其中一行。
  • 好的 - 所以我按照你的建议去做,它说没有找到DbSet,我觉得这很奇怪。我检查并确定我没有将System.Data.Entities 添加到我的参考文献中。所以我添加了它并遇到了同样的问题。然后我记得我必须使用 NuGet 为另一个项目安装 EntityFramework,所以我这样做了,然后......宾果游戏!一切都开始工作了!因此,如果其他人遇到此问题 - NuGet 控制台中的 Install-Package EntityFramework 会修复它
  • 不是那么直观!!谢谢! :)
【解决方案2】:

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

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

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

【讨论】:

  • 这有什么帮助?他们在.Net 4.5中。
  • @GertArnold 也许您的问题与此不同。对不起。
  • 这不是我的问题。这只是没有回答问题,因为 .net 4.5 不是问题。
【解决方案3】:

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

我还需要在出现 First 或 Default 之前引用 System...

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多