2015-02-06 3 views
2

Я нахожусь в ODataController, и у меня есть ODataQueryOptions (и все остальное).Перевести запрос OData на SQL

Я знаю, что источником данных является таблица в SQL Server.

Однако моя модель EF (которая была использована платформой WEB API для маршрутизации HTTP-запроса на мой контроллер) является безликой, то есть у меня нет класса POCO.

Обычно, если у меня есть класс POCO, структура будет магически писать SQL из запроса OData, чтобы пейджинг, фильтрация и сортировка выполнялись в базе данных, а не в памяти на веб-сервере. Вы можете использовать Database.Log на DbContext, чтобы увидеть SQL, сгенерированный из операторов LINQ, содержащих классы POCO.

Как это сделать для меня? У меня есть модель EF, у меня есть запрос OData, но как я могу объединить их для запроса SQL Server?

+0

Я написал динамический ODATA, конвертировав запрос OData в SQL по адресу: https://github.com/cuongle/DynamicOdata. –

ответ

0

Я написал package для преобразования запросов OData в объекты IQueryable, которые могут быть использованы для прямого запроса базовой базы данных. Вам все равно необходимо предоставить метаданные о таблице, но ее можно передать во время выполнения, а не требовать POCO.

Что касается генерации SQL-пакетов, то возвращаемые объекты IQueryable являются объектами ObjectQuery EntityFramework, поэтому вы можете просто вызвать ToString(), чтобы показать SQL, но в настоящее время нет способа получить параметры и связанные значения, так что вы просто лучше использовать сгенерированный IQueryable, чтобы напрямую запрашивать базу данных.

Смежные вопросы