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

.NET8隔离模式下Azure SQL触发器转换后Item含空值问题

Azure函数.NET6进程内转.NET8隔离模型:SQL触发器字段为空问题及Newtonsoft配置失效情况

我正尝试将Azure函数从.NET6.0进程内模型迁移至.NET8.0隔离模型。该函数基于启用了变更跟踪的Azure SQL Server数据库,使用Azure SQL触发器,触发后会把变更数据同步更新到Cosmos DB容器。

在.NET6.0进程内模型下运行完全正常,但切换到.NET8.0隔离模型后,触发器虽然能在表数据变更时正常触发,但获取到的SqlChange<T>中的Item所有字段都是null或默认值。两个版本使用的是完全相同的实体模型和DbContext,本地调试也确认Item里本该有值的字段都没有数据。

采用Suresh提供的解决方案,切换为System.Text.Json序列化后问题解决,但公司全局适配的Newtonsoft.Json配置无法生效,相关配置代码如下。因账号等级不足,没法给该答案点赞。

函数代码示例

public async Task RunGroupTransformAsync([SqlTrigger("[FACETS].[CMC_GRGR_GROUP]", "CONNECTION-AZURE-SQL-RAW")] IReadOnlyList<SqlChange<CmcGrgrGroup>> changes,
 FunctionContext context)
{
   foreach (SqlChange<CmcGrgrGroup> change in changes)
   {  
     var logger = context.GetLogger("CmcGrgrGroup"); 
     logger.LogInformation($"Group Change operation: {change.Operation}");
     logger.LogInformation($"GrgrCk: {rawGroup.GrgrCk}");
     CmcGrgrGroup rawGroup = change.Item; 
     //Update Cosmos Container with rawGroup
    }
}

Newtonsoft.Json全局配置代码

// Configure global JSON serialization settings using Newtonsoft.Json
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore,
    DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate,
    Formatting = Formatting.None,
    ContractResolver = new DefaultContractResolver
    {
        NamingStrategy = new SnakeCaseNamingStrategy()
        {
            ProcessDictionaryKeys = true,
            OverrideSpecifiedNames = true
        }
    },
    MissingMemberHandling = MissingMemberHandling.Ignore
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:05:08