Regole e semantica del percorso delle risorse (framework di ADO.NET Data Services)

In questo documento vengono illustrati i vari percorsi che è possibile costruire utilizzando le regole e la semantica del percorso delle risorse di ADO.NET Data Services. Vengono inoltre indicati tutti i vincoli specifici per un particolare elemento del percorso delle risorse.

Regole

Le regole seguenti si applicano a qualsiasi segmento all'interno di un percorso di risorsa:

  • Se un set di entità non è nel contenitore di entità predefinito, è necessario comporre l'indirizzo utilizzando la sintassi seguente: /ServiceName/<EntityContainer>/<EntitySet>. Se i segmenti compongono un percorso che identifica un set di entità nello stesso contenitore del primo set riportato nel percorso, il set non deve essere preceduto dal nome del contenitore.

  • L'ordine delle chiavi in un predicato di chiave composta è significativo. Un client deve organizzare i valori delle chiavi di una chiave composta nello stesso ordine in cui sono elencati nella descrizione CSDL (Conceptual Schema Definition Language) del servizio dati. Per ulteriori informazioni, vedere Schema concettuale (CSDL).

  • Non sono consentiti ulteriori segmenti di percorso dopo /$links/<segmento>. Ad esempio, un segmento di percorso non può esistere dopo 'BestFriend' nell'URI http://host/service.svc/Person(1)/$links/BestFriend. La presenza di segmenti di percorso aggiuntivi provoca una risposta 400 Richiesta non valida.

  • Non sono consentite opzioni query che iniziano con $, ad esempio $filter, in qualsiasi richiesta a un URI che indirizza un collegamento tramite $links. La presenza di simili opzioni query provoca una risposta 400 Richiesta non valida. Nota: le opzioni query diverse da ADO.NET che non iniziano con $ sono valide.

  • In tutti i casi in cui viene utilizzata la sintassi riportata di seguito, è possibile adoperare una proprietà di collegamento in sostituzione di una proprietà di navigazione.

  • In tutti i casi in cui viene utilizzata la sintassi riportata di seguito, è possibile adoperare la prima occorrenza di un set di entità in un segmento di percorso in sostituzione di un'operazione di servizio.

Semantica

Nell'elenco dei tipi di sintassi URI riportato di seguito viene specificata la semantica relativa al set di base degli URI di ADO.NET Data Services. È possibile combinare questi casi di base per creare URI più lunghi. Ogni URI di esempio è seguito dalla sintassi LINQ equivalente.

URI: NomeServizio/<set di entità>

Questa sintassi rappresenta tutte le istanze di un tipo di entità all'interno del set di entità specificato. Il set può disporre di 0, 1 o molte istanze del tipo di entità.

Esempio:

In questo esempio si ottengono tutti i clienti del set di entità Customers:

https://www.contoso.com/dataservice.svc/Customers

Sintassi LINQ equivalente:

from c in Customers 
select c

URI: NomeServizio/<set di entità>(keyPredicate)

Questa sintassi rappresenta l'istanza del tipo di entità la cui chiave è uguale al predicato chiave ed è inclusa nel set di entità specificato.

Esempio:

In questo esempio si ottiene il cliente identificato dalla chiave ALFKI:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')

Sintassi LINQ equivalente:

(from c in Customers
where c.keyProperty == "ALFKI"
select c).First()

URI: NomeServizio/<set di entità>(keyPredicate)/<Tipo complesso>

Questa sintassi rappresenta l'istanza del tipo complesso nel tipo di entità specificato la cui chiave è uguale al predicato chiave ed è inclusa nel set di entità specificato.

Esempio:

In questo esempio si ottiene l'indirizzo del cliente identificato dalla chiave ALFKI nel set di entità Customers:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address

Sintassi LINQ equivalente:

(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType).First()

URI: NomeServizio/<set di entità>(KeyPredicate)/<Tipo complesso>/<Proprietà>

Questa sintassi rappresenta la proprietà di un tipo complesso nell'istanza del tipo di entità la cui chiave è uguale al predicato chiave ed è inclusa nel set di entità specificato.

È possibile aggiungere un segmento /$value a un URI che termina con una proprietà. Il segmento $value funge da operatore di risoluzione del riferimento e indica che deve essere restituito solo il valore della proprietà senza sintassi circostante o metadati aggiuntivi.

Esempio:

In questo esempio si ottiene l'indirizzo del cliente identificato dalla chiave ALFKI nel set di entità Customers:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name

Questo esempio è uguale all'esempio precedente, ma rappresenta il valore della proprietà senza la presenza di eventuali metadati circostanti. Ad esempio, un URI che specifica un'immagine .jpg potrebbe essere direttamente incluso come valore dell'attributo SRC in un tag HTML IMG:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name/$value

Sintassi LINQ equivalente:

(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType.Property).First()

URI: NomeServizio/<set di entità>(KeyPredicate)/<Proprietà>

Questa sintassi rappresenta la proprietà dell'istanza del tipo di entità la cui chiave è uguale al predicato chiave ed è inclusa nel set di entità specificato.

È possibile aggiungere un segmento /$value a un URI che termina con una proprietà. Il segmento $value funge da operatore di risoluzione del riferimento e indica che deve essere restituito solo il valore della proprietà senza sintassi circostante o metadati aggiuntivi.

Esempio:

In questo esempio si ottiene il nome del cliente identificato dalla chiave ALFKI nel set di entità Customers:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName

Questo esempio è uguale all'esempio precedente, ma rappresenta il valore della proprietà senza la presenza di eventuali metadati circostanti. Ad esempio, un URI che specifica un'immagine .jpg potrebbe essere direttamente incluso come valore dell'attributo SRC nel tag HTML IMG:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName/$value

Sintassi LINQ equivalente:

(from c in Customers
where c.keyProperty == "ALFKI"
select c.Property).First()

URI: NomeServizio/<set di entità>(KeyPredicate)/<NavigationProperty>

Questa sintassi rappresenta un set di entità che contiene un insieme di istanze di un tipo di entità in relazione nessuno-a-molti. Il set di entità conterrà solo le istanze associate all'istanza del tipo di entità nel segmento di percorso precedente.

Esempio:

In questo esempio si ottengono tutti gli Orders del Customer identificato dalla chiave ALFKI:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Orders

Sintassi LINQ equivalente:

from c in Customers
from c2 in c.RelatedEntitySet 
where c.keyProperty == "ALFKI"
select c2

Sintassi LINQ alternativa:

Db.Customers.Where(c => p.keyProperty.Equals("ALFKI")).SelectMany(c => c.RelatedEntitySet);

Vedere anche

Concetti

Requisiti HTTP comuni (framework di ADO.NET Data Services)