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

使用.NET SDK创建ADF ForEachActivity时@item()解析为空的问题

问题排查与解决方法

问题原因

DatasetReference的ReferenceName字段仅支持静态的数据集名称字符串,无法直接解析动态表达式@item()。当你直接给ReferenceName赋值@item()时,ADF不会将其视为表达式执行,而是尝试将其作为字面量查找数据集,最终解析失败导致空引用错误。

解决方法

要在ForEach循环中动态引用数据集,需要使用DatasetReference的Expression属性承载动态表达式,而非ReferenceName。修改CopyActivity的Inputs部分,将动态表达式通过Expression对象传递:

ForEachActivity forEachActivity = new ForEachActivity
{
    Name = "ForEachDbContainer",
    BatchCount = 20,
    Items = new Expression { Value = "@array(['Source_db1_container1'])" },
    Activities = new List<Activity>
    {
        new CopyActivity
        {
            Name = "CosmosDBCopyActivity",
            Inputs = new List<DatasetReference> 
            { 
                new DatasetReference 
                { 
                    Expression = new Expression { Value = "@item()" } 
                } 
            },
            Outputs = new List<DatasetReference> { new DatasetReference { ReferenceName = "Destination_db1_container1" } },
            Source = new DocumentDbCollectionSource { },
            Sink = new DocumentDbCollectionSink { },
        }
    }
};

PipelineResource pipeline = new PipelineResource
{
    Activities = new List<Activity> { forEachActivity }
};
client.Pipelines.CreateOrUpdate(resourceGroupName, dataFactoryName, "YourPipelineName", pipeline);

额外注意事项

  • 确保数组中@item()对应的每个值(比如Source_db1_container1)都是ADF中已创建的数据集名称,否则仍会出现引用无效的错误。
  • 若需动态传递数据集参数而非切换整个数据集,可在数据集定义中设置参数,再通过DatasetReference的Parameters属性传递动态值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:59:53