Хобрук: Ваш путь к мастерству в программировании

Добавление настраиваемого свойства навигации в OData Web API Controller

У меня есть проект веб-API OData v3. Он использует модель Entity Framework Code First.

Основной класс - Купон. У него есть список. На самом деле это двухэлементная коллекция подтипов ItemRequirement и BasketRequirement. Я хочу сказать:

../odata/Coupons(5)/ItemRequirement

Я НЕ могу заставить это работать.

Во-первых, в классе EF я добавил ItemRequirement как свойство [NotMapped] (поскольку класс уже имеет коллекцию базового класса в качестве свойства навигации, а добавление двух других в качестве свойств просто сгенерирует посторонние ключи таблицы и испортит базы данных без надобности. Иерархия таблиц в Code First отлично работает как есть).

ODataConventionModelBuilder () не принимает ItemRequirement в качестве свойства навигации

Я попытался добавить это:

// GET odata/Coupons(5)/ItemRequirement
public ItemRequirement GetItemRequirement( [FromODataUri] decimal key)
{
   return db.Coupons.Where(m => m.CouponId == key).SelectMany(m => m.RedemptionPurchaseRequirements).OfType<ItemRequirement>().FirstOrDefault();
}

URI НИКОГДА не попадет в этот код. Я обнаружил, добавив разработчика IODataRoutingConvention, что ODataPath настроен на навигацию / ключ / неразрешенный.

Я посмотрел на это решение, и оно мне тоже не помогло:

Добавление настраиваемого свойства навигации с поддержкой пользовательского запроса в ODataConventionModelBuilder

Я не знаю, заключается ли проблема в наследовании, в том, что свойство не отображается в EF, или в чем-то еще.

Я также обнаружил, что это не удается с 404:

oData/PurchaseRequirementsBases(5)/myNamespace.ItemRequirement

Какое колдовство необходимо для абстрагирования коллекции, чтобы потребитель OData мог видеть ItemRequirement как допустимое свойство Coupon?


Ответы:


1

Можете попробовать добавить свойство навигации явно?

odataConventionModelBuilder().Entity<Coupon>().HasOptional(coupon => coupon.ItemRequirement)
31.07.2014
  • Я попробую и доложу. Было трудно понять, почему иногда работают аннотации, иногда работают соглашения, а иногда работает построитель моделей в любой комбинации. 31.07.2014
  • Новые материалы

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

    Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
    В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

    Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
    Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..