Как запросить с помощью ODATA наличие связи между двумя объектами?

Есть ли способ написать запрос ODATA (т. е. с использованием URL-адреса ODATA), который проверяет наличие связи между двумя экземплярами сущности?

Представьте, что у меня есть два типа сущностей в службе ODATA: Person и Project. Представьте, что я определил отношение «многие ко многим» между ними (что-то вроде «Человек владеет проектом»). У меня есть первичный ключ (ID) каждого человека и проекта, и я хочу знать, владеет ли человек проектом.

Я могу выяснить, учитывая человека, как получить все проекты, принадлежащие этому человеку, но в общем случае это будет возвращать гораздо больше данных, чем я хочу (и иметь проблемы с производительностью в других подобных сценариях). Могу ли я как-то запросить сами отношения?

Мой сервер использует WCF и Entity Framework 4.0 на ASP.NET. Мой клиент - это HTML и jquery, работающие в браузере.

Если нет возможности написать запрос отношения, есть ли наилучшая практика для чего-то подобного, чтобы расширить службу ODATA с помощью специального метода для проверки этого?

Спасибо!

Дэйвид


person David Ornstein    schedule 03.04.2011    source источник


Ответы (1)


Я думаю, вы можете просто вызвать что-то вроде: ODataService.svc/Persons(1)/Projects(5). Это попытается вернуть Project с идентификатором = 5, связанным с Person с идентификатором = 2, потому что Persons в этом случае — это набор объектов, а Projects — свойство навигации для объекта Person. Если отношение существует, вы получите запись. Если он не существует, вы получите что-то вроде Ресурс не найден.

person Ladislav Mrnka    schedule 03.04.2011
comment
О, круто. Я не знал, что вы можете предоставить ключ к свойству навигации. Я попробую это. - person David Ornstein; 04.04.2011