c# - tutorial - Recurso no encontrado para el segmento ''Propiedad''
wcf service tutorial (3)
También recibí un error "Recurso no encontrado para la propiedad de segmento". El mío parece ser que en la cláusula where estoy buscando por clave primaria. He encontrado algunos recursos que dicen que generará un error (incluso cuando se usa FirstOrDefault ()) cuando se usa una clave principal que no existe (a diferencia de otras cláusulas where que no proporcionan resultados). Supongo que algo similar te está sucediendo a ti mismo.
Cuando se utiliza el cliente de ADO.Net Data Services para actualizar una entidad llamando a LoadProperty
:
ctx.BeginLoadProperty(this, "Owner", (IAsyncResult ar) => ...
Lanza un error en el servidor si la propiedad es null
Error: excepción lanzada: System.Data.Services.DataServiceException: recurso no encontrado para el segmento ''Propietario''. en System.Data.Services.RequestDescription.GetSingleResultFromEnumerable (SegmentInfo segmentInfo) en System.Data.Services.DataService1.CompareETagAndWriteResponse (RequestDescription description, ContentFormat responseFormat, IDataService dataService)
en System.Data.Services.DataService1.SerializeResponseBody (RequestDescription description, IDataService dataService) en System.Data.Services.DataService1.HandleNonBatchRequest (RequestDescription description) en System.Data.Services.DataService`1.HandleRequest ()
El problema es que el cliente no sabe si la propiedad es null
o si aún no se ha completado. El propietario de la propiedad es un enlace de un Vehicle
a un Customer
.
Alguna idea de lo que está mal?
Gracias
Las consultas sobre claves primarias generan una excepción cuando la clave no existe. La solución consiste en agregar una expresión ficticia verdadera en la condición (por ejemplo: 1 == 1 && item.Id == XXX).
Sin la expresión ficticia, la solicitud de ADO.NET es:
http: //localhost//test.svc/Role(XXX)
Con la condición ficticia, la solicitud es:
http: //localhost//test.svc/Role()?$filter=true y (Id eq 1)
El comportamiento esperado (nulo devuelto) es correcto en el segundo caso.
Establezca la propiedad IgnoreResourceNotFoundException del contexto del servicio en true:
svc.IgnoreResourceNotFoundException = true;