2013-01-11 22 views
8

Veritabanındaki tüm albüm kayıtlarını almak için bir temsilci oluşturuyorum. Bunu başka bir projede de aynı şekilde kullandım, ama bir sebepten dolayı bu sefer bir hata alıyorum.Derlenmiş Sorgulama ObjectContext'e hiçbir dolaylı başvuru dönüşümü yok

Bir adımı kaçırdım mı? Bu hatanın neden ortaya çıktığından emin değilim.

Kod

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

Hata

Hata 1 tipi 'CodyData.Diagram.CodySolutionEntities' tipi olarak kullanılamaz 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

cevap

16

hata mesajı CodySolutionEntities olmadığını gösterir ObjectContext'dan türetilmiştir, bu sorun bir sorun çünkü CompiledQuery sadece işe yarar ObjectContext ile ks. Bu durumda CodySolutionEntities, şu anda the recommended context object to use olan DbContext nesnesinden türetilmelidir.

CompiledQuery büyük olasılıkla geçmişte çalıştı, çünkü Entity Framework sürümleri 4.1'den önce varlıklarınızı yönetmek için yerine ObjectContext türetilen bir nesne oluşturdu.

this yayımında açıklar, .NET 4.5'i hedefleyebiliyorsanız, EF 5'i kullanabilir ve derlenmiş LINQ'u sizin için Entity sorgularını otomatik olarak önbelleğe alacağı için artık CompiledQuery'a ihtiyacınız olmaz. Değilse, ObjectContext'u kullanmaya geri dönmek isteyebilirsiniz, ancak bunu yapmadan önce zihninizin sadece compiled or bust olduğundan emin olun.

+0

Yapmaya çalıştığım şeyi yapmak için 'DbContext' komutunu kullanmanın eşdeğer yolu ne olurdu? – Cody

+1

Sorun şu ki, ** 'CompiledQuery' ile' DbContext' kullanamazsınız. Bakınız: http://stackoverflow.com/a/6731102/1289454. Derlenmeyen bir sorgu ile uğraşabilir misiniz? 'kullanarak (var context = new CodySolutionEntities()) {var albümler = context.Albums.Include (a => a.Fotoğraflar); // ...} – gowansg

İlgili konular