使用.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
相关产品推荐
相关产品推荐

