Скомпилированный запрос без неявного преобразования ссылок в 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, но перед этим убедитесь, что ваше мышление не просто скомпилировано или перебор.

Другие вопросы по тегам