2014-10-04 2 views
8

Я пытаюсь улучшить производительность веб-приложения, кэшируя запрос.Entity Framework 6 Скомпилированный запрос LINQ

public static Func<myEntity, List<HASHDuplicates>, IQueryable<FormResponse>> CompiledDuplicatedResponses = 
    CompiledQuery.Compile<myEntity, List<HASHDuplicates>, IQueryable<FormResponse>>(
    (db, hashes) => from r in db.FormResponse 
        from h in db.IndexHASHes 
        from d in hashes 
        where r.id == h.FormResponseID && h.IndexHASHString == d.hash 
        select r); 

Ошибка я получаю во время компиляции:

Тип «MyEntity» не может быть использован в качестве параметра типа «» в TArg0 универсального типа или метода «System.Data.Entity.Core. Objects.CompiledQuery.Compile (System.Linq.Expressions.Expression>). Нет никакого неявного преобразования ссылок из 'myEntity' в 'System.Data.Entity.Core.Objects.ObjectContext'.

Я использую Ef6

+0

Вам нужен объект 'ObjectContext' в качестве первого параметра типа в' методы Compile' , – Ofiris

ответ

18

Хорошо, кажется, что в EF5 и больше запросов автоматически компилируются и нет необходимости компилировать их. ObjectContext не используется больше, и мы имеем теперь DbContext: Compiled Query no implicit reference conversion to ObjectContext

Еще один интересный пост на Составитель запроса: http://blog.codinghorror.com/compiled-or-bust/