我试图从dynamoDB多个表中检索数据,在每个表中,我有哈希键和范围键,但我只是有哈希键,所以没有范围键它不起作用,它抱怨像范围键丢失。
var batchGets = new List<Amazon.DynamoDBv2.DataModel.BatchGet>();
public void SetBatchGet<T>(T entity)
{
var batch = context.CreateBatchGet<T>(null);
batch.AddKey(entity); /// ERROR : Range key missing
batchGets.Add(batch);
}
public async Task<List<object>> CreateMultiTableBatchGet(DynamoDBOperationConfig dynamoDBOperationConfig = null)
{
try
{
var result = context.CreateMultiTableBatchGet(batchGets.ToArray());
await result.ExecuteAsync();
batchGets = new List<Amazon.DynamoDBv2.DataModel.BatchGet>();
return null;
}
catch (System.Exception ex)
{
batchGets = new List<Amazon.DynamoDBv2.DataModel.BatchGet>();
throw ex;
}
}
// Caller
var pr = new Participant();
pr.Code = Code; // Just passing hash key.
_repo.SetBatchGet(pr);
_repo.CreateMultiTableBatchGet();
如何使多表工作没有范围键。
对于BatchGetItems
,您必须提供完整的主键,散列(分区)和范围(排序)键。如果范围键未知,则需要使用Query
请求,其中只需要提供散列键。然而,没有BatchQueryItems
这种东西。
最接近的是PartiQL APIExecuteStatement
,您可以在其中欺骗"batchquery";使用IN
操作符:
SELECT * FROM mytable WHERE pk IN [1,2,3]