Как я могу построить клиент OData на основе общей модели (классы POCO)?

В моем проекте я использую OData v3 и v4 (веб-API ASP.NET с Entity Framework сзади). В настоящее время я собрал клиент с помощью инструментов Visual Studio.

Но есть ли другой способ? Нужно ли мне создавать клиента на основе метаданных $ и набора инструментов?

Можно ли поделиться моей моделью (контрактом) совместно используемой библиотекой и построить клиент следующим образом:

var client = new ODataClient<MySharedModel>(uri);
MySharedModel.Product product = client.Products.Where(p => p.Category.Name == "Vegetables").FirstOrDefault();

Модель может быть набором моих собственных объектов DTO, которые я могу сопоставить с эквивалентными объектами инфраструктуры объектов.

Моя цель - поделиться хорошо документированной моделью (документация с исходным кодом в формате XML) с дополнительной логикой, такой как реализация ToString и дополнительные свойства. Более того, я сохраняю дополнительный шаг: создание клиента (это отстой, когда вы автоматически собираете и публикуете все свои пакеты на сервере TFS Build).

Это возможно для OData v3 или OData v4?

0 ответов

OData недавно начала возрождаться, и команда регулярно выпускает новые обновления генератора сущностей OData Connected Service, так что вы можете подумать о том, чтобы дать ему еще один шанс.
Вы определенно можете повторно использовать ту же модель, но тогда вы потеряете специфичные для клиента функции, которые сгенерированы для вас, например, выделенный контейнер со всеми наборами сущностей как свойства, свойства коллекции, представленные какObservableCollection<T>, а также объекты с самопроверкой и другие.

Все классы генерируются как partial classes, поэтому вы всегда можете расширить их, добавив методы в свои собственные части, которые, в этом случае, также могут быть общими классами.

Что касается документации, то в настоящее время она не поддерживается, но это было предложено и, похоже, рассматривается для будущего развития.

В любом случае, это определенно возможно и не должно быть слишком сложным с использованием ваших собственных сущностей.
Чтобы узнать, как облегчить клиентский доступ OData с помощью ваших клиентских POCO, я бы рекомендовал сгенерировать модель один раз и сохранить код в своем проекте или в виде исключенных файлов только для справки, чтобы вы могли имитировать аналогичную функциональность, которая работает для вас. Для меня это был самый полезный способ.

Кроме того, вам будет полезно ознакомиться с документацией и справочными документами по API, которые в последнее время были немного обновлены.

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