2013-01-11 13 views
8

Sto creando un delegato per recuperare tutti i record dell'album nel database. Ho usato la stessa cosa in un altro progetto, ma per qualche motivo ho riscontrato un errore questa volta.Compiled Query nessuna conversione implicita del riferimento a ObjectContext

Ho perso un passaggio? Non sono sicuro del motivo per cui questo errore si sta verificando.

Codice

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

errore

di errore 1 Il tipo di 'CodyData.Diagram.CodySolutionEntities' non può essere utilizzato come tipo 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

risposta

16

Il messaggio di errore indica che non è CodySolutionEntities derivato da ObjectContext, che è un problema perché il CompiledQuery solo wor ks con un ObjectContext. In questo caso CodySolutionEntities deve essere derivato da un oggetto DbContext che, al momento, è the recommended context object to use.

Il CompiledQuery probabilmente ha funzionato in passato perché, le versioni di Entity Framework precedenti alla 4.1 hanno creato un oggetto derivato da ObjectContext anziché da DbContext per consentire la gestione delle entità.

Come this posta spiega, se siete in grado di indirizzare .NET 4.5 è possibile utilizzare EF 5, e non sarà necessario l'CompiledQuery più come esso verrà automaticamente compilato cache di LINQ to query di entità per voi. In caso contrario, si potrebbe voler passare a utilizzare ObjectContext, ma prima di farlo assicurarsi che la propria mentalità non sia semplicemente compiled or bust.

+0

Quale sarebbe il modo equivalente usando 'DbContext' per fare ciò che sto cercando di fare, allora? – Cody

+1

Questo è il problema, tu ** non puoi ** usare 'DbContext' con' CompiledQuery'. Vedi: http://stackoverflow.com/a/6731102/1289454. Potresti limitarti a una query che non è stata compilata? 'using (var context = new CodySolutionEntities()) {var albums = context.Albums.Include (a => a.Photos); // ...} ' – gowansg

Problemi correlati