可以使用表定义之间存在的关系将表行中的单个记录与其他记录相关联。 在 OData 中,关系表示为导航属性。
可以发现$metadata服务文档中存在哪些导航属性。 请参阅 Web API 导航属性。 有关现有 Dataverse 表,请参阅 Web API 实体类型参考
对于每个实体类型,请参阅列出的单值导航属性和集合值导航属性。
下表描述了 Dataverse 中表之间的三种类型的关系。
| 类型 | Description | Example |
|---|---|---|
| 一对多 | 一条记录可以有多个与之关联的记录。 |
帐户记录可以在contact_customer_accounts中具有许多联系人记录。 |
| 多对一 | 许多记录可以与一条记录相关联。 多对一关系是对一对多关系的反映。 只有一种关系。 |
可以使用单值导航属性将多个联系人记录关联到单个parentcustomerid_account记录。 |
| 多对多 | 许多记录可以与许多记录相关联。 | 每个 安全角色(角色) 可能包含对 系统用户定义的引用。 这两个 systemuserroles_association表都具有集合值导航属性。 |
使用单值导航属性
对于一对多或多对一关系中多方的现有记录,可通过设置指向另一记录的 Uri 引用建立关联。 执行此操作最简单且常见的方法是将 @odata.bind 注释追加到单值导航属性的名称,并在 PATCH 请求中将该值设置为指向另外一个记录的 URI。
与单值导航属性关联
例如,若要使用单值导航属性将联系人记录关联到parentcustomerid_account记录:
请求:
PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"parentcustomerid_account@odata.bind": "accounts(ce9eaaef-f718-ed11-b83e-00224837179f)"
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)
如 在创建时关联表行中所述,还可以以相同的方式将新记录与现有记录相关联。
使用单值导航属性来取消关联
若要取消关联,请将值设置为 null。
请求:
PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"parentcustomerid_account@odata.bind": null
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)
使用此方法取消关联时,请勿包含 @odata.bind 批注。 使用单值导航属性的名称:
请求:
PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"parentcustomerid_account": null
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)
详细信息: 基本更新
其他方法
可以使用其他方法来实现前面描述的相同结果,其中包含单值导航属性。
使用以下PUT请求来设置parentcustomerid_account单值导航属性的值:
请求:
PUT [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/parentcustomerid_account/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"@odata.id": "[Organization URI]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)"
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
注释
必须在设置值 @odata.id 时使用一个绝对 URL。
若要删除引用,请使用以下 DELETE 请求:
请求:
DELETE [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/parentcustomerid_account/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
使用集合值导航属性
使用 OData 时,多对多关系的两端都具有集合值导航属性。 对于一对多和多对一关系,“单方”表具有集合值导航属性。 在使用集合值导航属性时,如何处理这些类型的关系没有任何区别。 本部分介绍如何使用任何类型的关系的集合值导航属性。
将记录添加到集合
以下示例演示如何向帐户集合添加contact_customer_accounts记录,该记录是一对多关系的一部分。
请求:
POST [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"@odata.id": "[Organization URI]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)"
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
以下示例演示如何将 角色 记录添加到 systemusersystemuserroles_association 集合,这是一种多对多关系。
请求:
POST [Organization Uri]/api/data/v9.2/systemusers(34dcbaf5-f718-ed11-b83e-00224837179f)/systemuserroles_association/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"@odata.id": "[Organization URI]/api/data/v9.2/roles(886b280c-6396-4d56-a0a3-2c1b0a50ceb0)"
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
从集合中删除记录
以下示例演示如何从帐户集合中删除contact_customer_accounts记录,条件是contactid的某个值为00aa00aa-bb11-cc22-dd33-44ee44ee44ee。
请求:
DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
以下请求也有效:
请求:
DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts/$ref?$id=[Organization URI]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
另请参阅
Web API 基本作示例 (C#)
Web API 基本作示例 (客户端 JavaScript)
使用 Web API 执行操作
撰写 Http 请求并处理错误
使用 Web API 查询数据
使用 Web API 创建表行
使用 Web API 检索表行
使用 Web API 更新和删除表行
使用 Web API 函数
使用 Web API 操作
使用 Web API 执行批处理作
使用 Web API 模拟其他用户
使用 Web API 进行条件操作