2009-02-03 10 views
16

Cuando se utiliza el cliente ADO.Net los servicios de datos para actualizar una entidad llamando al LoadProperty:de recursos que no se encuentra para el segmento 'Propiedad'

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

arroja un error en el servidor si la propiedad es null

Error: Exception Thrown: System.Data.Services.DataServiceException: Resource not found for the segment 'Owner'. at System.Data.Services.RequestDescription.GetSingleResultFromEnumerable(SegmentInfo segmentInfo) at System.Data.Services.DataService1.CompareETagAndWriteResponse(RequestDescription description, ContentFormat responseFormat, IDataService dataService)
at System.Data.Services.DataService1.SerializeResponseBody(RequestDescription description, IDataService dataService) at System.Data.Services.DataService1.HandleNonBatchRequest(RequestDescription description) at System.Data.Services.DataService`1.HandleRequest()

El problema es que el cliente no sabe si la propiedad es null o simplemente no se ha rellenado aún. El propietario de la propiedad es un enlace de Vehicle a Customer.

¿Alguna idea de qué pasa?

Gracias

Respuesta

19

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 maniquí la solicitud ADO.NET es:

http: //localhost//test.svc/Role(XXX)

Con la condición simulada, la solicitud es:

http: //localhost//test.svc/Role()?$filter=true and (Id eq 1)

el comportamiento esperado (null volvió) es correcto en el segundo caso.

+0

Esta [otra respuesta] (http://stackoverflow.com/questions/505761/resource-not-found-for-segment-property/5987733#5987733) es una mejor opción. Hace que el código sea más legible –

3

que he recibido un "no se encontraron de recursos para el segmento de 'propiedad'" error también. 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.

+0

parece ser el caso, me pregunto por qué? – gimpy

34

Conjunto IgnoreResourceNotFoundException propiedad del contexto de servicio a la verdadera:

svc.IgnoreResourceNotFoundException = true; 
+0

Tenga en cuenta que esta propiedad se agregó en .NET 3.5 SP1. –

Cuestiones relacionadas