NAVIGATE (Entity SQL)
Consente di eseguire la navigazione nella relazione stabilita tra le entità.
Sintassi
navigate(instance-expression, [relationship-type], [to-end [, from-end] ])
Argomenti
instance-expression
Istanza di un'entità.
relationship-type
Nome del tipo della relazione, dal file CSDL (Conceptual Schema Definition Language). relationship-type
è qualificato come <namespace>.<relationship type name>.
to
Entità finale della relazione.
from
Inizio della relazione.
Valore restituito
Se la cardinalità dell'entità finale è 1, il valore restituito è Ref<T>
. Se la cardinalità dell'entità finale è n, il valore restituito è Collection<Ref<T>>
.
Osservazioni:
Le relazioni sono costrutti di prima classe nel modello EDM (Entity Data Model). È possibile stabilire relazioni tra due o più tipi di entità e navigare nella relazione da un'entità finale all'altra. I parametrifrom
e to
sono condizionatamente facoltativi in assenza di ambiguità nella risoluzione dei nomi all'interno della relazione.
NAVIGATE è valido nello spazio O e C.
Il formato generale di un costrutto di navigazione è il seguente:
navigate(instance-expression
, relationship-type
, [ to-end
[, from-end
] ] )
Ad esempio:
Select o.Id, navigate(o, OrderCustomer, Customer, Order)
From LOB.Orders as o
Dove OrderCustomer è l'oggetto relationship
, mentre Customer e Order rappresentano l'oggetto to-end
(Customer) e l'oggetto from-end
(Order) della relazione. Se OrderCustomer era una relazione n:1, il tipo di risultato dell'espressione NAVIGATE è Ref<Customer>.
La forma più semplice di questa espressione è la seguente:
Select o.Id, navigate(o, OrderCustomer)
From LOB.Orders as o
Analogamente, in una query del formato seguente, l'espressione NAVIGATE produrrebbe come risultato Collection<Ref<Order>>.
Select c.Id, navigate(c, OrderCustomer, Order, Customer)
From LOB.Customers as c
L'espressione dell'istanza deve essere un tipo di entità/riferimento.
Esempio
Nella query Entity SQL seguente viene usato l'operatore NAVIGATE per eseguire la navigazione nella relazione stabilita tra i tipi di entità Address e SalesOrderHeader. La query è basata sul modello Sales di AdventureWorks. Per compilare ed eseguire questa query, effettuare le operazioni seguenti:
Seguire la procedura indicata in How to: Execute a Query that Returns StructuralType Results.
Passare la query seguente come argomento al metodo
ExecuteStructuralTypeQuery
:
SELECT address.AddressID, (SELECT VALUE DEREF(soh)
FROM NAVIGATE(address,
AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID)
AS soh)
FROM AdventureWorksEntities.Addresses AS address