Вопрос

При использовании ADO.Net Клиент служб передачи данных для обновления объекта путем вызова LoadProperty:

ctx.BeginLoadProperty(this, "Owner", (IAsyncResult ar) => ...

Он выдает ошибку на сервере, если свойство null

Ошибка:Выброшенное исключение:Система.Данные.Сервисы.Исключение DataServiceException:Ресурс не найден для сегмента "Владелец".в System.Data.Services.Описание запроса.Получение результата из Numerable (SegmentInfo segmentInfo) в System.Data.Services.DataService1.Сравните тэг и Writeresponse(описание запроса description, формат содержимого responseFormat, идентификатор DataService DataService)
в System.Data.Services.DataService1.SerializeResponseBody(описание запроса description, IDataService DataService) в System.Data.Services.DataService1.HandleNonBatchRequest(описание запроса описание) в System.Data.Services.DataService`1.handleRequest()

Проблема в том, что клиент не знает, является ли свойство null или просто еще не был заполнен.Владелец недвижимости - это ссылка с Vehicle к a Customer.

Есть какие-нибудь идеи, что не так?

Спасибо

Это было полезно?

Решение

Запросы к первичным ключам генерируют исключение, когда ключ не существует.Обходной путь заключается в добавлении фиктивного выражения true в условие (например :1==1 && item.Id == ХХХ).

Без фиктивного выражения ADO.NET запрос является:

http://localhost//test.svc/Роль(XXX)

С фиктивным условием запрос является:

http://localhost//test.svc/Role()?$filter=true и (идентификатор, равный 1)

Ожидаемое поведение (возвращаемый null) является правильным во втором случае.

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

Установить Исключение IgnoreResourceNotFoundException свойство контекста сервиса иметь значение true:

svc.IgnoreResourceNotFoundException = true;

Я также получил сообщение об ошибке "Ресурс не найден для сегмента 'Property'".Похоже, что в предложении where я ищу по первичному ключу.Я нашел некоторые ресурсы, которые говорят, что это выдаст ошибку (даже при использовании FirstOrDefault()) при использовании первичного ключа, который не существует (в отличие от других предложений where, которые просто не предоставляют результатов).Я бы предположил, что нечто подобное происходит и с вами.

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