ODATA EXPAND не работает должным образом

У меня есть фильтр URL, например: t1?$filter=ID eq 1&$expand=t2/t3/t4/t5/t6.

Теперь, когда я запускаю этот запрос как самый первый запрос с использованием контекста, я получаю все! Когда я запускаю этот же запрос с другой страницы, и это второй запрос после предыдущего с использованием того же объектного контекста, запрос перестает расширяться в момент t3! Объект является нулевым, хотя идентификатор объекта явно присутствует. Данные существуют! Так что тут действительно что-то странное. Примечание. Я использую одноэлементный класс фабрики объектного контекста, поэтому каждая страница создает свой собственный объектный контекст для использования для выполнения операций CRUD.


person Ryan Lege    schedule 10.01.2012    source источник


Ответы (1)


Если вы используете клиентскую библиотеку WCF DS (DataServiceContext и связанные классы), то, скорее всего, это связано с настройкой DataServiceContext.MergeOption на клиенте. По умолчанию установлено значение AppendOnly, что означает, что если экземпляр данной сущности уже существует на клиенте, новые данные, поступающие с сервера, не будут обновлять его (это необходимо для предотвращения переопределения запросов возможными изменениями, сделанными на клиенте). Вы можете изменить MergeOption на OverwriteChanges, и тогда будут использоваться значения сервера. (Это относится даже к свойствам навигации, поэтому кажется, что расширение не работает, но на самом деле сервер отправляет данные обратно клиенту, но клиент их сбрасывает).

person Vitek Karas MSFT    schedule 10.01.2012
comment
Интересно. Я пойду на работу и попробую это немедленно. Я предполагаю, что эта опция находится в инициализации службы, где она настраивает права CRUD для каждого объекта? - person Ryan Lege; 11.01.2012
comment
Это сработало! Видимо мне нужно было ознакомиться с этими вариантами - person Ryan Lege; 11.01.2012