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' 不能用作类型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

4

1 回答 1

17

错误消息表明CodySolutionEntities不是从 派生的ObjectContext,这是一个问题,因为CompiledQuery仅适用于ObjectContext。在这种情况下CodySolutionEntities,必须从一个DbContext对象派生,此时推荐使用的上下文对象

CompiledQuery可能在过去有效,因为 4.1 之前的实体框架版本创建了一个派生自的对象,ObjectContext而不是DbContext让您管理您的实体。

就像这篇文章解释的那样,如果您能够以 .NET 4.5 为目标,则可以使用 EF 5,您将不再需要它CompiledQuery,因为它会自动为您缓存已编译的 LINQ to Entity 查询。如果不是,您可能想要考虑切换回使用ObjectContext.,但在此之前,请确保您的思维方式不是简单地编译或破坏

于 2013-01-12T05:53:25.383 回答