共用方式為


資源路徑規則和語意 (ADO.NET 資料服務架構)

本文件描述可以使用 ADO.NET 資料服務資源路徑規則和語意 (Semantics) 建構的各種路徑。它也會指出特定資源路徑項目特有的任何條件約束。

規則

下列規則適用於資源路徑內部的任何區段:

  • 如果某個實體集不在預設實體容器中,您就必須使用下列語法來設定此位址的格式:/ServiceName/<EntityContainer>/<EntitySet>。如果這些區段撰寫成可在與路徑中所示第一個集合相同的容器中識別實體集的路徑,此集合的前面就不需要加上容器名稱。

  • 在複合索引鍵述詞 (Predicate) 中,索引鍵的順序很重要。用戶端必須按照索引鍵值在資料服務之概念結構定義語言 (CSDL) 描述中所列的相同順序,在複合索引鍵中組織這些索引鍵值。如需詳細資訊,請參閱概念結構描述 (CSDL)

  • 在 /$links/<segment> 之後不允許使用其他路徑區段。例如,下列 URI 中的 'BestFriend' 之後不得存在路徑區段:http://host/service.svc/Person(1)/$links/BestFriend。如果存在任何其他路徑區段,就會產生「400 錯誤要求」回應。

  • 在使用 $links 來定址連結之 URI 的任何要求中,不允許存在以 $ 為開頭的查詢選項,例如 $filter。如果存在這類查詢選項,就會產生「400 錯誤要求」回應。請注意:不是以 $ 為開頭的非 ADO.NET 查詢選項是有效的。

  • 在使用下列語法的所有案例中,連結屬性可以替代導覽屬性。

  • 在使用下列語法的所有案例中,路徑區段中第一次出現的實體集可以替代服務作業。

語意

ADO.NET 資料服務 URI 基本集合的語意指定在下列 URI 語法類型清單中。您可以結合這些基本案例來撰寫更長的 URI。每個 URI 範例後面都會接著對等的 LINQ 語法。

URI:serviceName/<entity set>

這個語法代表指定之實體集內部的所有實體類型執行個體 (Instance)。這個集合可能會有 0、1 或許多個實體類型執行個體。

範例:

這個範例會取得 Customers 實體集中的所有客戶:

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

對等的 LINQ 語法:

from c in Customers 
select c

URI:serviceName/<entity set>(keyPredicate)

這個語法代表其索引鍵等於索引鍵述詞而且位於指定之實體集內部的實體類型執行個體。

範例:

這個範例會取得 ALFKI 索引鍵所識別的客戶:

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

對等的 LINQ 語法:

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

URI:serviceName/<entity set>(keyPredicate)/<Complex Type>

這個語法代表在指定的實體類型中,其索引鍵等於索引鍵述詞而且位於指定之實體集內部的複雜類型執行個體。

範例:

這個範例會在 Customers 實體集中取得 ALFKI 索引鍵所識別之客戶的位址:

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

對等的 LINQ 語法:

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

URI:ServiceName/<entity set>(KeyPredicate)/<Complex Type>/<Property>

這個語法代表其索引鍵等於索引鍵述詞而且位於指定之實體集內部的實體類型執行個體中,某個複雜類型的屬性。

以屬性結束的 URI 可以附加 /$value 區段。$value 區段會當做取值 (Dereference) 運算子,而且表示應該只傳回屬性的值,而不包含其他中繼資料或周圍語法。

範例:

這個範例會在 Customers 實體集中取得 ALFKI 索引鍵所識別之客戶的位址:

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

雖然這個範例與上一則範例相同,但是它代表沒有任何周圍中繼資料的屬性值。例如,如果某個 URI 指定了 .jpg 影像,此 URI 就可以直接當做 SRC 屬性的值包含在 IMG HTML 標記中:

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

對等的 LINQ 語法:

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

URI:serviceName/<entity set>(KeyPredicate)/<Property>

這個語法代表其索引鍵等於索引鍵述詞而且位於指定之實體集內部的實體類型執行個體屬性。

以屬性結束的 URI 可以附加 /$value 區段。$value 區段會當做取值運算子,而且表示應該只傳回屬性的值,而不包含其他中繼資料或周圍語法。

範例:

這個範例會在 Customers 實體集中取得 ALFKI 索引鍵所識別之客戶的名稱:

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

雖然這個範例與上一則範例相同,但是它代表沒有任何周圍中繼資料的屬性值。例如,如果某個 URI 指定了 .jpg 影像,此 URI 就可以直接當做 SRC 屬性的值包含在 IMG HTML 標記中:

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

對等的 LINQ 語法:

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

URI:serviceName/<entity set>(KeyPredicate)/<NavigationProperty>

這個語法代表包含零至多個實體類型執行個體之集合的實體集。此實體集只會包含與先前路徑區段中之實體類型執行個體相關聯的執行個體。

範例:

這個範例會取得 ALFKI 索引鍵所識別之 Customer 的所有 Orders

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

對等的 LINQ 語法:

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

替代的 LINQ 語法:

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

另請參閱

概念

一般 HTTP 需求 (ADO.NET 資料服務架構)