Как мне использовать .“Включить” в сервисную операцию для ADO.Net Служб передачи данных

StackOverflow https://stackoverflow.com/questions/494337

Вопрос

Я использую ADO.Net Службы передачи данных и выполняю сервисную операцию, которая в конечном итоге возвращает результаты некоторых инструкций linq to entities.Как часть этих инструкций Linq существует .Включить ("NavProp") для включения подобъекта.При запуске этой сервисной операции, похоже, она не возвращает это расширенное включение.Кто-нибудь знает, почему это так или как это исправить?Можно ли добавить ключевое слово в вызов операции service, чтобы расширить этот подобъект?(Я попробовал $expand=подобъект, но, похоже, это не сработало - плохой запрос).

Я бы хотел в конечном итоге получить либо:1.) синтаксис для инструкции linq в сервисной операции, которая возвращает .Включить также (я почти уверен, что это невозможно)

something like:
(from c in context.MyObj.Include("SubObj")
select c).ToList()
(this works inside the service operation, but doesn't provide the SubObj on the client side)

или

2.) синтаксис запроса операции службы на расширение подобъекта

something like: http://localhost/MyDataService/MyDataService.svc/ServiceOp1?param1=234$expand=SubObj (note: this doesn't work)
Это было полезно?

Решение

Похоже, в настоящее время это невозможно (.net 3.5 SP1).Сервисные операции будут возвращать только первичные типы или сущности.Любой другой тип, включая пользовательские типы или расширенные объекты, не может быть возвращен из сервисной операции.Чтобы справиться с этим, нужно просто вернуть элемент (ы) из сервисной операции, а затем, если требуется включение / расширение на стороне клиента, необходимо вызвать "LoadProperty" для желаемого расширения объекта (примечание:это означает еще одно попадание в базу данных для каждого вызова LoadProperty).

Другие советы

Отправив сообщение MS по электронной почте об этой проблеме, решение состоит в том, чтобы использовать опцию expand query в uri сервисной операции.Например,

.../<ServiceOperationName>.svc?$expand=<Property1Name>,<Property2Name> ...

Service Operation: GetCustomer
Relationship Property to load: Address
Uri: .../<GetCustomer>.svc?$expand=Address

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top