我正在使用Azure存储表,我有数据进入RowKey,其中包含斜杠.根据此MSDN页面,PartitionKey和RowKey中不允许使用以下字符:
正斜杠(/)字符
反斜杠()字符
数字符号(#)字符
问号(?)字符
控制字符从U + 0000到U + 001F,包括:
水平制表符(\ t)字符
换行符(\n)字符
回车(\ r)字符
控制字符从U + 007F到U + 009F
我见过有些人使用URL编码来解决这个问题.不幸的是,这可能会产生一些问题,例如能够插入但无法删除某些实体.我也看到有些人使用base64编码,但是这也可以包含不允许的字符.
如何在不运行不允许的字符或滚动自己的编码的情况下有效编码RowKey?
我正在使用适用于.NET的Windows Azure存储库4.3.0版.在我的ATS存储库类中,我有几个批处理删除方法,如下所示:
public async Task DeleteAsync(IEnumerable<T> entities)
{
await ExecuteAsBatch(entities, (batch, entity) => batch.Delete(entity));
}
private async Task ExecuteAsBatch(IEnumerable<T> entities, Action<TableBatchOperation, T> batchAction)
{
var byPartition = entities.GroupBy(x => x.PartitionKey).ToList();
await byPartition.ForEachParallel(async group =>
{
// A maximum of 100 actions are allowed per batch job
var segments = group.ToList().ToSegmentedList(100);
await segments.ForEachParallel(async segment =>
{
var batch = new TableBatchOperation();
foreach (var entity in segment)
{
batchAction(batch, entity);
}
await Table.ExecuteBatchAsync(batch);
}, 10);
}, 10);
}
Run Code Online (Sandbox Code Playgroud)
在我的代码的其他地方,该DeleteAsync()
方法正常工作.但是,在一个特定的地方,我在执行批处理时收到此错误消息:
Unexpected …
Run Code Online (Sandbox Code Playgroud)