2009-02-03 6 views
16

Lors de l'utilisation des données client ADO.Net services pour rafraîchir une entité en appelant le LoadProperty:Ressource introuvable pour le segment « propriété »

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

Il génère une erreur sur le serveur si la propriété est 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()

Le problème est que le client ne sait pas si la propriété est null ou n'a pas encore été renseignée. Le propriétaire est un lien entre un Vehicle et un Customer.

Des idées quel est le problème?

Merci

Répondre

19

L'interrogation de clés primaires génère une exception lorsque la clé n'existe pas. La solution de contournement consiste à ajouter une expression true factice dans la condition (par exemple: 1 == 1 & & item.Id == XXX).

Sans l'expression factice de la demande de ADO.NET est la suivante:

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

Avec la condition factice, la demande est la suivante:

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

Le comportement attendu (null retourné) est correcte dans le deuxième Cas.

+0

Cette [autre réponse] (http://stackoverflow.com/questions/505761/resource-not-found-for-segment-property/5987733#5987733) est une meilleure option. Fait pour le code plus lisible. –

3

J'ai reçu une erreur « Ressource introuvable pour le segment« propriété » aussi. Le mien semble être celui dans la clause où je regarde par la clé primaire. J'ai trouvé quelques ressources qui disent qu'il va lancer une erreur (même en utilisant FirstOrDefault()) en utilisant une clé primaire qui n'existe pas (contrairement à d'autres où les clauses qui ne fournissent pas de résultats). Je suppose que quelque chose de semblable se passe à vous-même.

+0

semble être le cas, je me demande pourquoi? – gimpy

34

Set IgnoreResourceNotFoundException propriété du contexte de service à true:

svc.IgnoreResourceNotFoundException = true; 
+0

Notez que cette propriété a été ajoutée dans .NET 3.5 SP1. –

Questions connexes