I'm creating a delegate to retrieve all album records in the database. I've used this same way in another project, but for some reason I'm getting an error this time.
Have I missed a step? I'm not sure why this error is appearing.
Code
public static readonly Func<CodySolutionEntities, IQueryable<Album>> SelectAlbums =
CompiledQuery.Compile<CodySolutionEntities, IQueryable<Album>>(
query => from q in query.Albums.Include("Photo")
select q);
Error
Error 1 The type 'CodyData.Diagram.CodySolutionEntities' cannot be used as type parameter 'TArg0' in the generic type or method 'System.Data.Objects.CompiledQuery.Compile<TArg0,TResult>(System.Linq.Expressions.Expression<System.Func<TArg0,TResult>>)'. There is no implicit reference conversion from 'CodyData.Diagram.CodySolutionEntities' to 'System.Data.Objects.ObjectContext'. C:\Users\Cody\Documents\CMBS\CodySolution\CodyData\Delegates\PhotoDelegates.cs 13 13 CodyData
The error message indicates that
CodySolutionEntities
is not derived fromObjectContext
, which is a problem because theCompiledQuery
only works with anObjectContext
. In this caseCodySolutionEntities
must be derived from aDbContext
object which, at this time, is the recommended context object to use.The
CompiledQuery
probably worked in the past because, Entity Framework versions prior to 4.1 created an object derived fromObjectContext
instead ofDbContext
for you to manage your entities.Like this post explains, if you're able to target .NET 4.5 you can use EF 5, and you won't need the
CompiledQuery
anymore as it will automatically cache compiled LINQ to Entity queries for you. If not you may want to look into switching back to using anObjectContext
, but before doing that make sure your mindset isn't simply compiled or bust.