2009-02-03 12 views
16

Quando si utilizza client di ADO.Net Data Services di aggiornare un'entità chiamando il LoadProperty:Risorsa non trovata per il segmento 'Proprietà'

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

getta un errore sul server se la proprietà è 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()

Il problema è che il client non sa se la proprietà è null o semplicemente non è stata ancora compilata. Il proprietario è un collegamento da Vehicle a Customer.

Qualche idea cosa c'è che non va?

Grazie

risposta

19

Le query sulle chiavi primarie generano un'eccezione quando la chiave non esiste. La soluzione alternativa consiste nell'aggiungere un'espressione fittizia true nella condizione (ad es .: 1 == 1 & & item.Id == XXX).

Senza l'espressione manichino richiesta ADO.NET è:

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

Con la condizione manichino, la richiesta è:

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

Il comportamento atteso (null restituiti) è corretta nella seconda Astuccio.

+0

Questa [altra risposta] (http://stackoverflow.com/questions/505761/resource-not-found-for-segment-property/5987733#5987733) è un'opzione migliore. Rende il codice più leggibile. –

3

che ho ricevuto un "non risorsa trovati per segmento 'Proprietà'" errore anche. Il mio sembra essere quello nella clausola dove sto guardando per chiave primaria. Ho trovato alcune risorse che dicono che genererà un errore (anche quando si utilizza FirstOrDefault()) quando si utilizza una chiave primaria che non esiste (al contrario di altre clausole dove non forniscono risultati). Immagino che una cosa simile stia succedendo a te stesso.

+0

sembra essere il caso, mi chiedo perché? – gimpy

34

Set IgnoreResourceNotFoundException proprietà del contesto di servizio a true:

svc.IgnoreResourceNotFoundException = true; 
+0

Si noti che questa proprietà è stata aggiunta in .NET 3.5 SP1. –

Problemi correlati