Перевести запросы 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 напрямую запрашивать базу данных.

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