2013-01-11 30 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。在這種情況下,CodySolutionEntities必須來自DbContext對象,此時該對象爲the recommended context object to use

CompiledQuery可能在過去工作,因爲實體框架4.1之前的版本創建了一個從ObjectContext而不是DbContext派生的對象,供您管理您的實體。

this類似,如果您能夠以.NET 5爲目標,則可以使用EF 5,並且不再需要CompiledQuery,因爲它會自動爲您編譯已編譯的LINQ to Entity查詢。如果不是的話,你可能會考慮切換回使用ObjectContext,但在做之前請確保你的心態不僅僅是compiled or bust

+0

什麼是使用'DbContext'來做我想做的事情的等價方法呢? – Cody

+1

這就是問題所在,你**不能**在'CompiledQuery'中使用'DbContext'。請參閱:http://stackoverflow.com/a/6731102/1289454。你可以堅持一個沒有編譯的查詢嗎? (var context = new CodySolutionEntities()){var albums = context.Albums.Include(a => a.Photos); // ...} – gowansg