Клиент OData не выполняет регидратацию с использованием $ expand - PullRequest
2 голосов
/ 23 марта 2011

Я уже некоторое время использую OData и считаю, что это фантастический инструмент для настройки моего сервера.Сегодня я столкнулся с тем, чего не видел прежде, и это меня совершенно смущает.

Я использую .Expand на клиенте, чтобы запросить дерево данных для отчета при его получении.Я использовал точный запрос в прототипе, и он работал отлично (то есть полностью гидратированный).Когда я использую Fiddler для отправки запроса, пакет ответа идеален и включает в себя все данные, которые я ищу.

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

var report = (serviceContext.Reports.Expand("ReportAreas").Where(r=>r.ReportID==reportID)).SingleOrDefault();

дает мне отчет, но ReportAreas содержит 0 элементов.Если я тогда попробую:

serviceContext.LoadProperty(report,"ReportAreas");

, тогда ReportAreas содержит около 20 элементов.

Это сводит меня с ума, потому что Expand работает для другого дерева объектов (другой запрос, но тот же функциональный код)без проблем вообще.У кого-нибудь есть предложения относительно того, как я могу понять, что здесь происходит?

Обновление:

Некоторая новая информация об этом сегодня, котораявозможно более странный и предлагает мне ошибку в клиенте OData.Я обнаружил, что возвращается только подмножество объектов Report без заполнения расширенных свойств.Большинство отчетов в базе данных отлично.т.е. если я запрашиваю все отчеты с расширенным ReportAreas (вместо уточнения до единого reportID), то около 80-90% имеют ненулевой счет для ReportAreas, где остальные имеют 0.

Когда отчет возвращается без каких-либоиз заполненных свойств (ноль или 0 отсчетов) создаются действительные объекты свойств и устанавливаются их свойства (из точек останова в файле Reference.cs для ссылки на службу), например, значения ReportID, PropertyAreaID и History, принадлежащиеОбъекты ReportArea задаются 16 раз во время разрешения запроса, но при запросе список ReportAreas имеет значение 0.Когда я использую _service.LoadProperty, он возвращает 16 ReportAreas.

Это пахнет для меня несоответствием ссылок в запросе Expand, но оно слишком непротиворечиво, чтобы быть простой проблемой.Отчеты, которые работают ВСЕГДА, работают, а Отчеты, которые не работают, НИКОГДА не работают.Действительно надеясь, что кто-то может помочь мне точно определить это, чтобы я мог перейти к некоторому полезному кодированию ...

1 Ответ

0 голосов
/ 21 апреля 2011

Решение этой проблемы (по крайней мере, до тех пор, пока я ее не пойму) состоит в том, чтобы установить

serviceContext.MergeOption = MergeOption.OverwriteChanges;

Мне сказали, что это относится к клиенту, который не перенаправляет ссылки, если они уже отслеживаются.Я обновлю этот ответ, если узнаю больше / пойму проблему лучше.

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