2009-02-03 6 views
16

Bei der Verwendung von ADO.Net Data Services-Client eine Einheit zu aktualisieren, indem Sie den anruf LoadProperty:Ressource nicht für das Segment 'Property' gefunden

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

Es wirft einen Fehler auf dem Server, wenn die Eigenschaft null

ist

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()

Problem ist, dass der Client nicht weiß, ob die Eigenschaft null oder nur noch nicht ausgefüllt wurde. Der Eigentümer ist ein Link von einem Vehicle zu einem Customer.

Irgendwelche Ideen, was ist los?

Dank

Antwort

19

Abfragen auf Primärschlüssel generieren eine Ausnahme, wenn der Schlüssel nicht existiert. Die Problemumgehung besteht darin, in der Bedingung einen Dummy-True-Ausdruck hinzuzufügen (z. B .: 1 == 1 & & item.Id == XXX).

Ohne den Dummy-Ausdruck der ADO.NET Anforderung:

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

Mit dem Dummy-Zustand, wobei die Anforderung ist:

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

Das erwartete Verhalten (null zurück) richtig in der zweiten Fall.

+0

Diese [andere Antwort] (http://stackoverflow.com/questions/505761/resource-not-found-for-segment-property/5987733#5987733) ist eine bessere Option. Macht den Code lesbarer. –

3

ich auch eine „Ressource wurde nicht gefunden für Segment‚Property‘“ Fehler erhalten. Mir scheint, dass ich in der Where-Klausel nach Primärschlüssel suche. Ich habe einige Ressourcen gefunden, die sagen, dass es einen Fehler (auch wenn FirstOrDefault() verwendet wird) bei der Verwendung eines Primärschlüssels, der nicht existiert (im Gegensatz zu anderen Where-Klauseln, die nur keine Ergebnisse liefern). Ich schätze, eine ähnliche Sache passiert mit dir selbst.

+0

scheint der Fall zu sein, ich frage mich, warum? – gimpy

34

Set IgnoreResourceNotFoundException Eigenschaft des Service Kontext wahr:

svc.IgnoreResourceNotFoundException = true; 
+0

Beachten Sie, dass diese Eigenschaft in .NET 3.5 SP1 hinzugefügt wurde. –