Перевести запросы OData в SQL
Я в ODataController
и у меня есть ODataQueryOptions
(и все остальное).
Я знаю, что источником данных является таблица в SQL Server.
Однако моя модель EF (которая использовалась средой WEB API для маршрутизации HTTP-запроса на мой контроллер) не содержит типов, т. Е. У меня нет класса POCO.
Обычно - если бы у меня действительно был класс POCO - фреймворк волшебным образом писал бы SQL из запроса OData, чтобы подкачка, фильтрация и сортировка выполнялись в базе данных, а не в памяти на веб-сервере. Ты можешь использовать Database.Log
на DbContext
чтобы увидеть SQL, сгенерированный из операторов LINQ, включающих классы POCO.
Как я могу это сделать для меня? У меня есть модель EF, у меня есть запрос OData, но как мне объединить их для запроса SQL Server?
1 ответ
Я написал пакет для преобразования запросов OData в IQueryable
объекты, которые можно использовать для прямого запроса к базовой базе данных. Вам все еще нужно предоставить метаданные о таблице, но их можно передавать во время выполнения, а не требовать POCO.
Что касается генерации SQL, возвращаемые объекты IQueryable являются объектами EntityFramework ObjectQuery, так что вы можете просто вызвать ToString()
чтобы показать SQL, но в настоящее время нет способа получить параметры и связанные значения, так что вам просто лучше использовать сгенерированный IQueryable
напрямую запрашивать базу данных.