我最近将现有项目迁移到.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.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; }
........
}
答案 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)
我遇到了同样的问题。 我尝试了以下解决方案来解决问题
我希望这个问题得到解决:)
答案 2 :(得分:-1)
这个问题已经有了答案,但是我有不同的原因。
在“ First”或“ Default”出现之前,我还需要引用系统...