影响Simple.OData.Client @odata.bind收集路由

问题描述 投票:0回答:1

简介

我正在编写一个 .NET 应用程序,在其中连接到 Dynamics 并尝试更新记录。我正在使用

Simple.OData.Client
软件包 v6.0.1(repo here)。我有一个模型,其中有一个查找属性,我想将其与模型的其他属性一起更新。这是我的课程:

public class UpdateRequest
{
    [JsonProperty("msdyn_systemstatus")]
    public required Status Status { get; set; }

    [JsonProperty("msdyn_substatus")]
    public required Substatus Substatus { get; set; }

    //more properties
}

Status 是一个枚举(选择),Substatus 是一个查找字段,具有以下类定义:

[DataContract(Name = "msdyn_itemsubstatus")]
public class Substatus
{
    [JsonProperty("msdyn_substatusid")]
    public Guid? Id { get; set; }

    [JsonProperty("msdyn_name")]
    public string? Name { get; set; }
}

我的更新代码很简单:

IODataClient _odataClient; //injected in constructor
var result = await _odataClient.For<Item>()
    .Key(id)
    .Set(updateRequest) // Status and Substatus.Id are filled, Substatus.Name is null
    .UpdateEntryAsync(true);

记录请求时,我看到创建了以下内容:

{
    "@odata.type": "#Microsoft.Dynamics.CRM.msdyn_parententity",
    "msdyn_systemstatus": 690970000,
    "[email protected]": "{dynamicsbaseurl}/msdyn_itemsubstatus(insertguid)"
}

问题

msdyn_substatus 属性中生成的 url 引用相关实体的单数形式,因此更新失败。当通过邮递员以复数形式执行相同的更新请求时,它可以工作。

我已经做了相当多的研究,但还没有找到任何关于如何影响所使用的集合名称的代码示例,而且似乎也无法确定它在库中的哪个位置完成。如果您能帮助理解序列化的工作原理和影响(也许是某种属性?),我们将不胜感激。

.net-core dynamics-crm odata simple.odata.client
1个回答
0
投票

dataverse Web API 使用“集合名称”来寻址实体。您可以从maker studio 或使用Web api 本身获取表/实体的名称。请参阅https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/web-api-samples

也就是说,如果您使用.net,您可能需要考虑使用 dataverse 服务客户端,它提供 IOrganizationService 接口来与 datavers 进行通信。它还可以与 pac modelbuilder 一起构建强类型,允许您为表、自定义 api 等创建类型。 https://github.com/microsoft/PowerPlatform-DataverseServiceClient

© www.soinside.com 2019 - 2024. All rights reserved.