OData - вложенное расширение со вторым расширением коллекции - PullRequest
0 голосов
/ 28 октября 2019

У меня есть три таблицы Foo, Bar и Baz. Foo имеет отношение один-ко-многим с Bar, которое, в свою очередь, имеет отношение один-к-одному с Baz.

Foo -> Bar -> Baz

Я бы хотел расширить Foo для Bar и Baz с использованием запроса OData linq. Я ожидаю, что результат будет выглядеть следующим образом:

Foos: [
   {
      Foo: 
      {
        ... other Foo contents ...,
        Bars: [
           {
              Bar:
                 ... other Bar contents ..., 
                 Baz : { Baz contents }
           },
           ... more Bars ...
       ]
     },
     ... more Foos ...
]

Я пытался использовать

c.Foo.Expand("Bars($expand(Baz))")

Но это возвращает ошибку

Система. Reflection.TargetInvocationException: исключение было сгенерировано целью вызова.

Microsoft.OData.Core.ODataException: при записи ответа JSON должна быть указана модель пользователя, а набор сущностей и тип сущности должны быть переданы в метод ODataMessageWriter.CreateODataEntryWriter или ODataFeedAndEntrySerializationInfo дляODataEntry или ODataFeed, которые пишутся.

(Этот метод расширения работал для меня в прошлом при работе только с отношениями один-к-одному, но, по-видимому, неверен, когда используется коллекция.)

Пока это не работает, просто запустив первую часть запроса,

c.Foo.Expand(x => x.Bars)

работает как положено, а расширение на Bar для Baz работает

c.Bar.Expand(x => x.Baz)

Мне также удалось получить данные, развернув обе таблицы вне Bar:

c.Bar
    .Expand(x => x.Baz)
    .Expand(x => x.Foo)

Но это неэффективно и возвращает данные в неправильном формате.

Есть ли способ создать вложенный запрос OData, где второе расширение основано на расширенной коллекции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...