Скомпилированный запрос без неявного преобразования ссылок в 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
1 ответ
Сообщение об ошибке указывает на то, что CodySolutionEntities
не является производным от ObjectContext
что является проблемой, потому что CompiledQuery
работает только с ObjectContext
, В этом случае CodySolutionEntities
должен быть получен из DbContext
объект, который в настоящее время является рекомендуемым контекстным объектом для использования.
CompiledQuery
вероятно, работал в прошлом, потому что версии Entity Framework до 4.1 создали объект, производный от ObjectContext
вместо DbContext
для вас, чтобы управлять своими сущностями.
Как объясняется в этом посте, если вы можете настроить таргетинг на.NET 4.5, вы можете использовать EF 5, и вам не понадобится CompiledQuery
больше, поскольку он будет автоматически кешировать скомпилированные запросы LINQ to Entity для вас. Если нет, вы можете захотеть вернуться к использованию ObjectContext
, но перед этим убедитесь, что ваше мышление не просто скомпилировано или перебор.