我正在将我所有的azure表存储功能升级到Azure.Data.Tables库,因为Microsoft.Azure.Cosmos.Table SDK已被弃用.

我使用Cosmos包中的代码轻松地加载了批量数据.

try {
        var pks = entities.Select(x => x.PartitionKey).Distinct().ToList();
        foreach (var pk in pks) {
            await AddSymbolIfNotExistOrUpdateLastRecordDateAsync(pk, entities[0].RowKey);
            var records = entities.Where(x => x.PartitionKey == pk).Distinct().ToList();  // partition key is the symbol
            var batches = records.Batch(100);  //batching max value is 100
            completionMessage.Append($" A storage batch started for {records.Count} {pk} records into the table: {tableName} ");

            #region BATCH JOB

            //Iterating through each batch
            foreach (var block in batches) {
                var batchOperationObj = new TableBatchOperation();
                foreach (var record in block) {
                    batchOperationObj.InsertOrReplace(record);
                }
                try {
                    var worked = await table?.ExecuteBatchAsync(batchOperationObj)! != null;
                    if (worked) {
                        batchResponse.NumberOfRecordsProcessed += batchOperationObj.Count;
                        batchOperationObj.Clear();
                    }
                } // rest removed for brevity

我找不到任何方法、示例或教程来说明如何使用此SDK插入批次.有没有可能用它行不通呢?只有用于单一实体的Add方法.

任何 idea 都值得欣赏,因为我一次加载数千条记录,只是无法想象通过迭代来做是唯一的方法.

推荐答案

这样做当然是有可能的.您只需使用TableTransactionAction将实体添加到批处理中,然后调用TableClient.SubmitTransactionAsync将实体保存在批处理中.

下面是伪代码:

TableClient client = new TableClient(new Uri(""));
var transactionActions = new List<TableTransactionAction>()
{
    new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk1")),
    new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk2")),
    new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk3")),
    new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk4")),
    new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk5")),
};
await client.SubmitTransactionAsync(transactionActions);

Csharp相关问答推荐

我应该将新的httpReportMessage()包装在using声明中吗?

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

PredicateBuilder不是循环工作,而是手动工作

.NET最小API映射将T参数列表为[FromQuery]

无法使用ternal- .net修复可空警告

将修剪声明放入LINQ中

一小时后,自定义缓存停止在App Insight中保存

碰撞检测与盒碰撞器,其isTrigger on问题

如何注册接口类型,类型<>

Azure DEVOPS找不到定制的Nuget包

C# CompareTo()和Compare()可以返回除-1和1以外的整数吗?

BlockingCollection T引发意外InvalidOperationException

HttpRequestMessage.SetPolicyExecutionContext不会将上下文传递给策略

如果是,我怎么才能让这个加75,如果不是,我怎么才能减go 100?

升级后发出SWITCH语句

如何将默认区域性更改为fr-FR而不是en-US?

Visual Studio 17.8.0制表符自动完成问题--三缩进

如何在C#控制台应用程序中获取用户输入并将其作为订单项目进行处理?

从HTML元素获取 colored颜色

无法对包含字符串的列进行排序.请与实体框架联接