2013-01-11 19 views
8

データベース内のすべてのアルバムレコードを取得するためのデリゲートを作成しています。私は別のプロジェクトでこの同じ方法を使用しましたが、何らかの理由で今回はエラーが発生しています。コンパイルされたクエリでObjectContextへの暗黙的な参照変換がありません

ステップがありませんでしたか?なぜこのエラーが出現するのか分かりません。タイプ 'CodyData.Diagram.CodySolutionEntities' 1

コード

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

エラー

エラーは、エラーメッセージが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

として使用することができませんObjectContextから派生したもので、これは問題である。なぜなら、CompiledQueryはwor ksはObjectContextです。この場合、CodySolutionEntitiesは、オブジェクト(この時点ではthe recommended context object to use)から派生する必要があります。

CompiledQueryは、エンティティを管理するために、DbContextの代わりにObjectContextから派生したオブジェクトを、4.1より前のEntity Frameworkバージョンで作成したため、おそらくこれまでに働いていたようです。

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。コンパイルされていないクエリを使用するだけでいいですか? '(var context = new CodySolutionEntities()){var albums = context.Albums.Include(a => a.Photos);を使用します。 // ...} ' – gowansg

関連する問題