Что проще: написать собственный анализатор OData uri или собственный поставщик IQueryable? - PullRequest
3 голосов
/ 30 сентября 2011

Я хочу создать службу OData, которая возвращает данные из нескольких источников.По этой причине я не могу использовать WCF Data Services ни с одним из готовых поставщиков, плюс нам действительно нужен больший контроль над моделью данных.

Я вижу, что у нас есть два варианта, если мы придерживаемся продукта MSstack;

  1. Используйте WCF с WebGet / WebInvoke для имитации API-интерфейса OData, а также для внутреннего анализа и анализа строки запроса.Например, для случаев, когда наши данные находятся в базе данных Sql, мы должны преобразовать предложение $ filter в предложение SQL where для построения нашего запроса.Обратите внимание, что здесь мы не можем использовать любой вид ORM, поскольку наша модель данных является динамической, и у нас нет классов сущностей CLR, которые могли бы быть заполнены ORM.

  2. Мы используемСлужбы данных WCF с провайдером Custom, для этого требуется, чтобы мы передали IQueryable для набора ресурсов, что оставляет нам либо выполнение таблицы Select * FROM и использование Linq для объектов, либо реализацию нашего собственного провайдера IQueryable, который поддерживает выражения, требуемые OData.,Примет ли WCF Data Services даже IQuerable?

Что было бы проще всего реализовать?В основном мы хотим поддерживать функции $ filter в спецификациях OData, $ расширения и $ select могут появиться позже.

Кажется, стыдно отказываться от служб данных WCF, было бы предпочтительнее, если бы они могли предоставить проанализированныйЗапрос OData, который можно затем преобразовать в запрос Linq самостоятельно, не ожидая, что у вашего источника данных будет поставщик IQueryable.

1 Ответ

5 голосов
/ 30 сентября 2011

Вы можете написать свой собственный класс контекста данных. Чем больше функциональности вам нужно, тем больше усилий. WCF Data Services Toolkit может помочь, и я нашел эту дорожную карту OData: представление любого источника данных в качестве службы OData презентация из MIX, чтобы быть полезной.

Поэтому я говорю, что написание собственного провайдера IQueryable было бы проще и чище.

...