I recently migrated an existing project to .net 4.5 and changed out what this project was using for data access (switching to Entity Framework).
For some reason any time I try to access any functions for a DbSet (Where
, First
, FirstOrDefault
, etc) it throws the error:
Error 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' could be found (are you missing a using directive or an assembly reference?
This uses .net 4.5 and I read that these functions are no longer in System.Linq but are now stored in System.Core. I have added a reference to System.Core to the project but I am still getting the error. There is a using statement for System.Linq, but not for System.Core.
Can anyone see why I would be getting this error? Suggestions on how to fix?
UPDATE:
This is the line that throws the error:
VIModel Db = new VIModel();
Customer = Db.Customers.FirstOrDefault(c => c.CustomerId == CustomerId && c.IsPrimary);
and my DbContext:
public partial class VIModel : DbContext
{
........
public virtual DbSet<Customer> Customers { get; set; }
........
}
I was having the same problem. I tried the following solution to solve the problem
The assembly for
Queryable
(the thing that adds theFirstOrDefault
extension method you are using) is inSystem.Core
, however it's namespace isSystem.Linq
, you can see this on the MSDN page for itYou need to have in your project a refrence to
System.Core
and in the file you are trying to use it ausing System.Linq;
If you have both of these things double check that your project or some project you are refrencing did not create it's own
System.Data.Entity.DbSet<T>
class which does not implementIQueryable<T>
orIEnumerable<T>
.