2013-01-11 3 views
8

Ich erstelle einen Delegaten, um alle Albumeinträge in der Datenbank abzurufen. Ich habe den gleichen Weg in einem anderen Projekt verwendet, aber aus irgendeinem Grund bekomme ich diesmal einen Fehler.Kompilierte Abfrage keine implizite Referenzkonvertierung in ObjectContext

Habe ich einen Schritt verpasst? Ich bin mir nicht sicher, warum dieser Fehler angezeigt wird.

-Code

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

Fehler

Fehler 1 vom Typ 'CodyData.Diagram.CodySolutionEntities' kann nicht als Typ 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 Nachricht

Antwort

16

Der Fehler verwendet werden, zeigt an, dass CodySolutionEntities nicht abgeleitet von ObjectContext, die ein Problem ist, weil die CompiledQuery nur wor ks mit einem ObjectContext. In diesem Fall muss CodySolutionEntities von einem DbContext Objekt abgeleitet werden, das zu diesem Zeitpunkt the recommended context object to use ist.

Die CompiledQuery hat wahrscheinlich in der Vergangenheit funktioniert, weil Entity Framework-Versionen vor 4.1 ein Objekt erstellt haben, das von ObjectContext anstelle von DbContext abgeleitet wurde, damit Sie Ihre Entitäten verwalten können. Wie this Post erklärt, wenn Sie in der Lage sind, .NET 4.5 zu tarnen, können Sie EF 5 verwenden, und Sie werden die CompiledQuery nicht mehr benötigen, da es kompilierte LINQ to Entity-Abfragen automatisch zwischenspeichert. Wenn nicht, dann sollten Sie vielleicht noch einmal auf ObjectContext zurückgreifen, aber bevor Sie das tun, stellen Sie sicher, dass Ihre Einstellung nicht einfach compiled or bust ist.

+0

Was wäre der äquivalente Weg mit 'DbContext', um das zu tun, was ich versuche zu tun? – Cody

+1

Das ist das Problem, Sie ** können 'DbContext' nicht mit' CompiledQuery' verwenden. Siehe: http://stackoverflow.com/a/6731102/1289454. Könnten Sie einfach bei einer Abfrage bleiben, die nicht kompiliert wird? 'Verwenden (var Kontext = neue CodySolutionEntities()) {var albums = context.Albums.Include (a => a.Photos); // ...} ' – gowansg

Verwandte Themen