使用 Web API 关联和取消关联表行

可以使用表定义之间存在的关系将表行中的单个记录与其他记录相关联。 在 OData 中,关系表示为导航属性。

可以发现$metadata服务文档中存在哪些导航属性。 请参阅 Web API 导航属性。 对于现有的 Dataverse 表,请参阅Web API EntityType 参考。对于每个实体类型,请查看列出的单值导航属性和集合值导航属性。

下表描述了 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 进行条件操作