Я использую 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.
Когда отчет возвращается без каких-либо заполненных свойств (null или 0 count), фактические объекты свойств создаются И их свойства устанавливаются (из точек останова в файле Reference.cs для ссылки на службу), поэтому, например, ReportID Значения, PropertyAreaID и History, принадлежащие объектам ReportArea, устанавливаются 16 раз во время разрешения запроса, но при запросе в списке ReportAreas счетчик равен 0. Когда я использую _service.LoadProperty, он возвращает 16 ReportAreas.
Мне пахнет несоответствием ссылок в запросе Expand, но это слишком непротиворечиво, чтобы быть простой проблемой. Отчеты, которые работают ВСЕГДА, работают, а отчеты, которые не работают, НИКОГДА не работают. Очень надеюсь, что кто-то поможет мне определить это, чтобы я мог перейти к полезному кодированию ...