You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dataverse.Client创建Dynamics 365 CRM账户时遇空值异常

解决Dataverse中枚举属性赋值导致Create方法ArgumentNullException的问题

问题分析

在使用Microsoft.PowerPlatform.Dataverse.Client创建Dynamics 365 CRM账户实体时,给枚举类型的custom_attribute2赋值后调用Create方法抛出ArgumentNullException,异常指向参数value,核心原因大概率是枚举值传递无效、实体配置错误或空值未被处理。

解决方案

1. 移除手动设置的Entity.Id

创建实体时无需手动指定account.Id = Guid.NewGuid();,Create方法会自动生成并返回新实体ID,手动设置ID可能干扰Dataverse内部逻辑,引发异常。

2. 规范枚举属性赋值方式

Dataverse的选项集(枚举)本质是整数值,需确保赋值的数值与Dataverse中选项集的配置完全匹配,推荐以下两种可靠赋值方式:

  • 直接使用整数赋值(替换为Dataverse中Admin选项对应的实际数值):
    account["custom_attribute2"] = 1;
    
  • 通过枚举转换+OptionSetValue赋值(更严谨,适合强类型场景):
    account["custom_attribute2"] = new OptionSetValue((int)custom_attribute2.Admin);
    

3. 排查空值与枚举有效性

  • 确认本地枚举custom_attribute2的数值与Dataverse选项集的数值完全一致,避免因映射错误导致无效值传递。
  • 如果使用可空枚举类型,需先检查值是否为null:
    if (custom_attribute2.Admin.HasValue)
    {
        account["custom_attribute2"] = new OptionSetValue(custom_attribute2.Admin.Value);
    }
    

4. 验证连接与必填属性

  • 调用serviceClient.IsReady确认Dataverse连接状态正常,避免因连接问题引发异常。
  • 检查账户实体的所有必填属性(如默认的name)是否已正确赋值,遗漏必填项也可能触发模糊的异常信息。

修正后的完整代码示例

string cs = "你的Dataverse连接字符串";

using ServiceClient serviceClient = new(cs);

if (serviceClient.IsReady)
{
    Entity account = new("account");
    account["name"] = "测试账户";
    account["custom_attribute1"] = "自定义属性值1";
    
    // 使用OptionSetValue赋值枚举属性
    account["custom_attribute2"] = new OptionSetValue((int)custom_attribute2.Admin);
    
    Guid newAccountId = serviceClient.Create(account);
    Console.WriteLine($"新账户创建成功,ID:{newAccountId}");
}
else
{
    Console.WriteLine("Dataverse连接失败,请检查连接字符串");
}

内容的提问来源于stack exchange,提问作者Shahin Jabbarov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:17:48