2013-01-11 6 views
8

데이터베이스의 모든 레코드를 검색하는 대리인을 만들고 있습니다. 나는 다른 프로젝트에서 이와 같은 방식으로 사용했지만, 어떤 이유로 이번에는 오류가 발생합니다.컴파일 된 쿼리가 ObjectContext에 대한 암시 적 참조 변환이 없습니다.

단계를 놓쳤습니까? 왜이 오류가 나타나는지 잘 모르겠습니다.

코드

 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

답변

16

오류 메시지가 CodySolutionEntities가 없음을 나타냅니다 ObjectContext에서 파생되었으므로 문제가되는 것은 CompiledQuery 뿐이므로 ks는 ObjectContext입니다. 이 경우 CodySolutionEntitiesDbContext 개체 (이때는 the recommended context object to use)에서 파생되어야합니다.

CompiledQuery은 이전에 Entity Framework 버전 4.1 이전에 DbContext 대신 ObjectContext에서 파생 된 개체를 생성하여 엔티티를 관리했기 때문에 효과가있었습니다.

post와 마찬가지로 .NET 4.5를 대상으로 할 수 있다면 EF 5를 사용할 수 있으며 CompiledQuery은 컴파일 된 LINQ to Entity 쿼리를 자동으로 캐시하므로 더 이상 필요하지 않습니다. 그렇지 않다면 ObjectContext을 사용하여 다시 전환하는 방법을 고려해 볼 수 있지만 그 전에는 단순히 compiled or bust이 아닌지 확인하십시오.

+0

'DbContext'를 사용하여 내가하려는 일을 수행하는 동등한 방법은 무엇입니까? – Cody

+1

그게 문제 야. ** DbContext와 CompiledQuery를 함께 사용할 수 없다. 참조 : http://stackoverflow.com/a/6731102/1289454. 컴파일되지 않은 쿼리를 붙이시겠습니까? 'using (var context = new CodySolutionEntities()) {var albums = context.Albums.Include (a => a.Photos); // ...}' – gowansg