更新到 dotnet 5 后出现 Cosmos DB TransactionalBatch 错误

Cosmos DB TransactionalBatch error after update to dotnet 5

我的基础存储库中有一些方法可以在 Cosmos DB 上执行一些批处理操作,它们是这样的:

public async Task AddRangeAsync(List<T> entities)
    {
        var container = _cosmosDbClientFactory.GetContainer(CollectionName);
        var entitiesList = entities.Split(_maxItemsPerBatch).ToList();

        foreach (var items in entitiesList)
        {
            var partitionKey = ResolvePartitionKey(items.FirstOrDefault());
            var transactionalBatch = container.CreateTransactionalBatch(partitionKey);

            items.ToList().ForEach(item => transactionalBatch.CreateItem(item));

            var result = await transactionalBatch.ExecuteAsync();

            if (!result.IsSuccessStatusCode)
            {
                throw new CosmosDbBatchOperationException(result.ErrorMessage);
            }
        }
    }

今天我将项目的 dotnet 版本从 dotnet 3.1 迁移到 dotnet 5,之后出现此错误:

System.MissingMethodException : Method not found: 'System.Threading.Tasks.Task1<Microsoft.Azure.Cosmos.Serialization.HybridRow.Result> Microsoft.Azure.Cosmos.Serialization.HybridRow.RecordIO.RecordIOStream.ReadRecordIOAsync(System.IO.Stream, System.Func2<System.ReadOnlyMemory1<Byte>,Microsoft.Azure.Cosmos.Serialization.HybridRow.Result>, System.Func2<System.ReadOnlyMemory1<Byte>,Microsoft.Azure.Cosmos.Serialization.HybridRow.Result>, Microsoft.Azure.Cosmos.Serialization.HybridRow.MemorySpanResizer1)'.

这发生在这一行:

var result = await transactionalBatch.ExecuteAsync();

版本信息:

有人知道怎么解决吗?

看来您遇到的问题可能与 SDK issue 中讨论的问题相同。

完整的二进制清理和重建值得尝试清除 Microsoft.Azure.Cosmos.Serialization.HybridRow.dll 的依赖冲突。如果这不起作用,您可以尝试将您的详细信息添加到该问题线程。

我检查了我所有的项目,它们引用了相同的 sdk 版本,所以我清理了我的解决方案并删除了所有 obj 和 bin 文件夹并再次尝试,但没有成功。 然后我尝试了这个 solution 因为我正在使用 Microsoft.Azure.Cosmos 3.17.0AspNetCore.HealthChecks.CosmosDb 5.0.3 ,所以我将 AspNetCore.HealthChecks.CosmosDb 降级到版本 3.1.2 并且它有效。