У меня есть три таблицы 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, где второе расширение основано на расширенной коллекции?