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

