Ressourcenpfadregeln und -semantik (ADO.NET Data Services-Framework)
In diesem Dokument werden die verschiedenen Pfade beschrieben, die mithilfe von ADO.NET Data Services-Ressourcenpfadregeln und -semantik konstruiert werden können. Außerdem werden alle Einschränkungen erläutert, die für ein bestimmtes Element des Ressourcenpfads vorliegen.
Regeln
Die folgenden Regeln gelten für alle Segmente innerhalb eines Ressourcenpfads:
Wenn eine Entität nicht im Standardentitätencontainer festgelegt ist, muss die Adresse mit der folgenden Syntax geformt werden:
/ServiceName/<EntityContainer>/<EntitySet>
. Wenn Segmente zu einem Pfad zusammengesetzt werden, der eine Entitätenmenge im selben Container wie die erste im Pfad genannte Menge identifiziert, muss vor der Menge kein Containername stehen.Die Reihenfolge der Schlüssel in einem Verbundschlüsselprädikat ist sehr wichtig. Ein Client muss die Schlüsselwerte in einem Verbundschlüssel in der gleichen Reihenfolge organisieren, wie diese in der CSDL-Beschreibung (Konzeptionelle Schemadefinitionssprache) eines Datendiensts aufgelistet sind. Weitere Informationen finden Sie unter Konzeptionelles Schema (CSDL).
Nach folgender Zeichenfolge sind keine weiteren Pfadsegmente zulässig: /$links/<segment>. Nach
'BestFriend'
in der URIhttp://host/service.svc/Person(1)/$links/BestFriend
darf beispielsweise kein Pfadsegment mehr vorhanden sein. Das Vorhandensein eines zusätzlichen Pfadsegments löst eine Antwort vom Typ "400 Bad Request" aus.In Abfragen von einem URI, der eine Verknüpfung mithilfe von
$links
adressiert, sind keine Abfrageoptionen zulässig, die mit$
starten, wie z. B.$filter
. Das Vorhandensein einer solchen Abfrageoption löst die Antwort "400 Bad Request" aus. Hinweis: Abfrageoptionen, die nicht von ADO.NET stammen und nicht mit$
starten, sind zulässig.In allen Fällen, in denen die folgende Syntax verwendet wird, kann eine Navigationseigenschaft durch eine Verknüpfungseigenschaft ersetzt werden.
In allen Fällen, in denen die folgende Syntax verwendet wird, kann ein Dienstvorgang durch das erste Vorkommen einer Entitätenmenge in einem Pfadsegment ersetzt werden.
Semantik
Die Semantik für die Basismenge von ADO.NET Data Services-URIs ist in der folgenden Liste von URI-Syntaxtypen aufgeführt. Sie können diese Basismengen kombinieren, sodass Sie auch längere URIs bilden können. Nach den einzelnen URI-Beispielen steht die entsprechende LINQ-Syntax.
URI : serviceName/<Entitätenmenge>
Diese Syntax stellt alle Instanzen eines Entitätstyps innerhalb einer bestimmten Entitätenmenge dar. Die Menge kann 0, 1 oder viele Instanzen eines Entitätstyps enthalten.
Beispiel:
In diesem Beispiel werden alle Kunden in der Customers
-Entitätenmenge abgerufen:
https://www.contoso.com/dataservice.svc/Customers
LINQ Framework-Entsprechung
from c in Customers
select c
URI: serviceName/<Entitätenmenge>(keyPredicate)
Diese Syntax stellt die Entitätstypeninstanz dar, deren Schlüssel dem Schlüsselprädikat entspricht und innerhalb der angegebenen Entitätenmenge liegt.
Beispiel:
In diesem Beispiel wird der durch den ALFKI
-Schlüssel identifizierte Kunde abgerufen:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')
LINQ Framework-Entsprechung
(from c in Customers
where c.keyProperty == "ALFKI"
select c).First()
URI: serviceName/<entity set>(keyPredicate)/<Komplexer Typ>
Diese Syntax stellt die Instanz des komplexen Typs im angegebenen Entitätstyp dar, deren Schlüssel dem Schlüsselprädikat entspricht und innerhalb der angegebenen Entitätenmenge liegt.
Beispiel:
In diesem Beispiel wird die Adresse des Kunden abgerufen, der vom ALFKI
-Schlüssel in der Customers
-Entitätenmenge identifiziert wird:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address
Entsprechende LINQ-Syntax:
(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType).First()
URI: ServiceName/<Entitätenmenge>(KeyPredicate)/<Komplexer Typ>/<Property>
Diese Syntax stellt die Eigenschaft eines komplexen Typs innerhalb der Entitätstypeninstanz dar, deren Schlüssel dem Schlüsselprädikat entspricht und innerhalb der angegebenen Entitätenmenge liegt.
Einem URI, der in einer Eigenschaft endet, kann ein /$value
-Segment angefügt werden. Das $value
-Segment fungiert als ein Dereferenzierungsoperator und gibt an, dass nur der Wert der Eigenschaft, ohne zusätzliche Metadaten bzw. umgebende Syntax, zurückgegeben werden sollte.
Beispiel:
In diesem Beispiel wird die Adresse des Kunden abgerufen, der vom ALFKI
-Schlüssel in der Customers
-Entitätenmenge identifiziert wird:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name
Dieses Beispiel entspricht dem vorherigen Beispiel, stellt jedoch den Wert der Eigenschaft ohne umgebende Metadaten dar. Wenn zum Beispiel in einem URI ein .jpg
-Bild angegeben wird, kann der URI direkt als der Wert des SRC
-Attributs in einem IMG
-HTML-Tag miteinbezogen werden:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name/$value
Entsprechende LINQ-Syntax:
(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType.Property).First()
URI: serviceName/<Entitätenmenge>(KeyPredicate)/<Property>
Diese Syntax stellt die Eigenschaft der Entitätstypeninstanz dar, deren Schlüssel dem Schlüsselprädikat entspricht und innerhalb der angegebenen Entitätenmenge liegt.
Einem URI, der in einer Eigenschaft endet, kann ein /$value
-Segment angefügt werden. $value
fungiert als ein Dereferenzierungsoperator und gibt an, dass nur der Wert der Eigenschaft, ohne zusätzliche Metadaten bzw. umgebende Syntax, zurückgegeben werden sollte.
Beispiel:
In diesem Beispiel wird der Name des Kunden abgerufen, der vom ALFKI
-Schlüssel in der Customers
-Entitätenmenge identifiziert wird:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName
Dieses Beispiel enspricht dem vorherigen Beispiel, stellt jedoch den Wert der Eigenschaft ohne umgebende Metadaten dar. Wenn zum Beispiel in einem URI ein .jpg
-Bild angegeben wird, kann der URI direkt als der Wert des SRC
-Attributs im IMG
-HTML-Tag miteinbezogen werden:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName/$value
Entsprechende LINQ-Syntax:
(from c in Customers
where c.keyProperty == "ALFKI"
select c.Property).First()
URI: serviceName/<Entitätenmenge>(KeyPredicate)/<NavigationProperty>
Diese Syntax stellt eine Entitätenmenge dar, die eine Auflistung von 0 (null) bis zu vielen Instanzen eines Entitätstyps enthält. Diese Entitätenmenge enthält nur Instanzen, die der Entitätstypeninstanz im vorherigen Pfadsegment zugeordnet sind.
Beispiel:
In diesem Beispiel werden alle Orders
für den durch den ALFKI
-Schlüssel identifizierten Customer
abgerufen:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Orders
Entsprechende LINQ-Syntax:
from c in Customers
from c2 in c.RelatedEntitySet
where c.keyProperty == "ALFKI"
select c2
Alternative LINQ-Syntax:
Db.Customers.Where(c => p.keyProperty.Equals("ALFKI")).SelectMany(c => c.RelatedEntitySet);
Siehe auch
Konzepte
Allgemeine HTTP-Anforderungen (ADO.NET Data Services-Framework)