Resource Not Found per il segmento 'Proprietà'
-
21-08-2019 - |
Domanda
Quando si utilizza client di ADO.Net Data Services di aggiornare un'entità chiamando il LoadProperty
:
ctx.BeginLoadProperty(this, "Owner", (IAsyncResult ar) => ...
Si genera un errore sul server se la proprietà è null
Errore: Eccezione generata: System.Data.Services.DataServiceException: Risorsa non trovata per il segmento 'proprietario'. a System.Data.Services.RequestDescription.GetSingleResultFromEnumerable (SegmentInfo segmentInfo) a System.Data.Services.DataService1.CompareETagAndWriteResponse (RequestDescription descrizione, ContentFormat responseFormat, IDataService Dataservice)
a System.Data.Services.DataService1.SerializeResponseBody (RequestDescription descrizione, IDataService Dataservice) a System.Data.Services.DataService1.HandleNonBatchRequest (RequestDescription Descrizione) a System.Data.Services.DataService`1.HandleRequest ()
Il problema è che il cliente non sa se la proprietà è Vehicle
o semplicemente non è stato ancora popolato. La proprietà proprietario è un collegamento da una Customer
ad un <=>.
Tutte le idee che cosa c'è di sbagliato?
Grazie
Soluzione
Interrogazione su chiavi primarie genera un'eccezione quando la chiave non esiste. La soluzione è aggiungere una vera espressione manichino nella condizione (per esempio: 1 == 1 && item.Id == XXX)
.Senza l'espressione fittizia richiesta ADO.NET è:
http: //localhost//test.svc/Role(XXX)
Con la condizione fittizia, la richiesta è:
http: //localhost//test.svc/Role()?$filter=true e (Id eq 1)
Il comportamento atteso (null restituiti) è corretta nel secondo caso.
Altri suggerimenti
IgnoreResourceNotFoundException proprietà del contesto di servizio true:
svc.IgnoreResourceNotFoundException = true;
Ho ricevuto anche una "risorsa non trovato per il segmento 'Proprietà'" errore. La mia sembra essere che nella clausola in cui sto cercando da chiave primaria. Ho trovato alcune risorse che dicono che genera un errore (anche quando si utilizza FirstOrDefault ()) quando si utilizza una chiave primaria che non esiste (al contrario di altri in cui le clausole che proprio non forniscono risultati). Direi una cosa simile sta accadendo a te stesso.