编译查询没有隐式的引用转换为ObjectContext。

9

我正在创建一个委托来检索数据库中的所有相册记录。我在另一个项目中使用了同样的方法,但出现错误。

我错过了什么步骤吗?我不确定为什么会出现这个错误。

代码

        public static readonly Func<CodySolutionEntities, IQueryable<Album>> SelectAlbums =
        CompiledQuery.Compile<CodySolutionEntities, IQueryable<Album>>(
            query => from q in query.Albums.Include("Photo")
                     select q);

错误

错误 1 类型“CodyData.Diagram.CodySolutionEntities”不能用作类型参数“TArg0”的类型,因为在泛型类型或方法“System.Data.Objects.CompiledQuery.Compile<TArg0,TResult>(System.Linq.Expressions.Expression<System.Func<TArg0,TResult>>)”中不存在从“CodyData.Diagram.CodySolutionEntities”到“System.Data.Objects.ObjectContext”的隐式引用转换。 C:\ Users \ Cody \ Documents \ CMBS \ CodySolution \ CodyData \ Delegates \ PhotoDelegates.cs 13 13 CodyData

1个回答

17
错误信息表明 CodySolutionEntities 没有派生自 ObjectContext,这是一个问题,因为 CompiledQuery 只能与 ObjectContext 一起使用。在这种情况下,CodySolutionEntities 必须派生自 DbContext 对象,目前 推荐使用的上下文对象CompiledQuery 过去可能工作正常,因为 Entity Framework 4.1 之前的版本为您创建了一个从 ObjectContext 而不是 DbContext 派生的对象来管理实体。

此篇文章所述,如果您能够针对.NET 4.5进行目标定位,则可以使用EF 5,并且不再需要CompiledQuery,因为它会自动为您缓存已编译的LINQ到实体查询。 如果没有,请考虑切换回使用ObjectContext,但在这样做之前,请确保您的心态不仅仅是编译或失败


那么,使用 DbContext 有什么等效的方法可以做到我想做的事情呢? - Cody
1
这就是问题所在,你不能CompiledQuery中使用DbContext。请参见:https://dev59.com/JGw15IYBdhLWcg3wv-RM#6731102 。你可以将查询不去编译吗?using(var context = new CodySolutionEntities()){ var albums = context.Albums.Include(a => a.Photos); //... } - gowansg
回答你的问题,等价的代码如下:public static readonly Func<CodySolutionEntities, IQueryable<Album>> SelectAlbums = query => from q in query.Albums.Include("Photo") select q; 但我不知道这是否比内联使用更有效。 - Tod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接