管理與開發 > 整合中心功能 > 資源提供者 > 關係資源提供者
  
關係資源提供者
資源之間的關係可以建模為關係資源提供者。每個關係資源提供者皆可處理扮演指定角色之資源之間的關係。
例如,您可能在 Owner 角色與 Ownables 角色之間擁有 Ownership 關係。提供 Ownership 關係的關係資源提供者會以表示此意思的 Relationship:Ownership 模型標籤標記。同樣地,其資源可扮演 Owner 與 Ownables 角色的資源提供者會分別以 Role:OwnerRole:Ownables 標籤標記。資源提供者會從所有父物範本與物形式繼承這些標籤 (通常不會繼承模型標籤) 來以不同方式處理 RoleRelationship 模型標籤。
例如,在 Ownership 關係的範例中,如果 Owner 角色提供者提供 IdName 欄位,而 Ownables 角色提供者提供 IdNumber 欄位,則關係資源提供者會提供 IdOwner-IdOwner-NameOwnables-IdOwnables-Number 欄位。
關係資源提供者本身就是資源提供者。不過,除了資源提供者所指定的基礎資料欄位 (例如,"Id") 以外,關係資源提供者也會提供在關係中扮演角色之資源的欄位。
* 
破折號 ("-") 字元可作為角色名稱與正常化角色欄位名稱之間的分隔符號使用。就其本身而言,並不支援在角色名稱中使用破折號字元。
除非特別說明,否則所有資源提供者共用的服務也適用於關係資源提供者。這些服務可讓您查詢、建立及刪除其他資源之間的關係。
關係提供者支援將 "extraParams" 中的 "joinType" 項目與 Get() 和 GetById() 服務搭配使用。支援的 (不區分大小寫) 值有:"inner"、"leftouter"、"rightouter" 與 "full_outer"。此項目會修改結果,就像您對 SQL 連接所預期的一樣。未指定此項目時,預設行為就是內部連接的行為。
針對其他資源提供者,建立資源時適宜提出特定資源提供者。但是,對於關係資源而言,並不建議這麼做。如果您有來自數個不同資源提供者之 Owner 與 Ownable 資源配對的集合,您應該不需要決定由哪個特定關係資源提供者實例來處理每個角色提供者配對的關係。您可在「資源管理員」上使用 CallServiceByCriteria 服務來對所有 Ownership 關係資源提供者呼叫 Create (透過模型標籤),而每個關係資源提供者則會依次建立它負責的關係。
關係資源提供者也提供其他資源提供者之外的額外服務。 GetRoles 服務提供有關關係角色的資訊。 InflateFromRole 服務會取用一個角色的一組資源,並傳回對應關係資源。
索引鍵式關係資源提供者
KeyBasedRelationshipResourceProvider 可處理一對多 (及一對一) 的關係,其關係會在角色資源中表示為一或多個等連接索引鍵欄位。在 Ownership 範例中,Owner 角色資源可以有 Name 欄位,而 Ownables 角色資源可以有等連接它的 OwnerName 欄位。
作為配置索引鍵式關係資源提供者的一部份,您可以使用模型標籤指定角色,並先指定一對多關係的一邊。在 Ownership 範例中,這表示應先指定 Owner 標籤。您也必須指定在每個角色中作為連接索引鍵使用的欄位,並確保在多欄位連接的情況下保持相同的相對順序。關係資源提供者只會套用至提供角色所需索引鍵欄位的該角色提供者 (如其 GetResourceDataShape() 服務所反映)。您可以指定角色資源提供者必須擁有的其他模型標籤,進一步限制適用的角色資源提供者。
KeyBasedRelationshipResourceProvider 目前不支援 Update 服務。此外,其 Create 服務只會建立關係;它將不會建立新角色資源或修改角色資源中的非索引鍵欄位,因此您必須只將每個角色資源 ID 的欄位傳遞給 Create。
連結式關係資源提供者
LinkTableBasedRelationshipResourceProviderTemplate 可處理多對多關係,其關係由例如資源的連結表 (也稱為連接表) 表示。在關係無法直接反映在任一角色資源中的情況下,它也可以用來表示一對多甚或一對一關係。因為使用單獨的連結資源,因此可根據需要傳遞有關關係的任意數量屬性。
欲配置 LinkTableBasedRelationshipResourceProvider,請指定兩個 KeyBasedRelationshipResourceProviders。每一項都應連接關係的一邊與連結資源,且每一項都應將連結資源表示為其第二角色。這兩個 KeyBasedRelationshipResourceProviders 應配置為共用其第二角色的共用資源提供者。KeyBasedRelationshipResourceProviders 的第一角色會變為 LinkTableBasedRelationshipResourceProvider 的角色 (以指定順序)此方法可避免將此提供者限制於特定連接索引鍵或連結表儲存機制。否則,LinkTableBasedRelationshipResourceProvider 行為非常類似於 KeyBasedRelationshipResourceProvider 的行為。
展開
來自關係另一邊的資料可以透過使用「展開」項目合併為「資源提供者」服務結果。如需詳細資訊,請參閱 extraParams 服務參數