Как выбрать и расширить свойства, доступные только в производных типах

У меня есть три объекта в иерархии наследования, как показано ниже.

<EntityType Name="Base" Abstract="true">
    <Property Name="id" Type="Edm.String" Nullable="false" />
</EntityType>

<EntityType Name="Derived1" Abstract="true" BaseType="Base">
    <NavigationProperty Name="idps" Type="Collection(Idps)" />
</EntityType>

<EntityType Name="Derived2" Abstract="true" BaseType="Base">
    <NavigationProperty Name="attributes" Type="Collection(Attributes)" />
</EntityType>

Я хочу поддерживать параметры запроса $select и $expand для идентификаторов и атрибутов.

/ base?$select = idps дает мне ошибку ниже

Запрос, указанный в URI, недействителен. Не удалось найти свойство с именем idps в типе Base."

Какой будет правильный вариант odata и как я могу это поддержать?

2 ответа

ODL поддерживает сегмент приведения типов в $select и $expand.

Вот несколько тестовых примеров, к которым вы можете обратиться:

1) https://github.com/OData/WebApi/blob/master/test/E2ETest/Microsoft.Test.E2E.AspNet.OData/NavigationPropertyOnComplexType/SelectImprovementOnComplexTypeTests.cs

2) https://github.com/OData/WebApi/blob/master/test/E2ETest/Microsoft.Test.E2E.AspNet.OData/NavigationPropertyOnComplexType/SelectImprovementOnComplexTypeTests.cs

Тестовые примеры охватывают приведение типа сложного типа, так же как и приведение типа сущности.

Мне удалось решить эту проблему с помощью запроса, подобного следующему:

/base?$select=Derived1/idps

В моем случае мои типы сущностей OData имеют явное пространство имен, поэтому мне пришлось фактически использовать запрос, подобный следующему:

/base?$select=Namespace.Derived1/idps

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