我正在DynamoDB中创建一个新项目,如果哈希键已经存在,我希望它引发异常。我想要这个,是因为出于性能方面的考虑,我不想在插入之前查询某个项目,因为我的键碰撞的可能性很小。但是,如果是这样,我想使用新密钥重试。目前,当我通过对象级api调用“保存”时,它只会更新记录。
public class DynamoService
{
private readonly IDynamoDBContext _dbContext;
private readonly IAmazonDynamoDB _dynamoClient;
public DynamoService(IAmazonDynamoDB dynamoClient, IDynamoDBContext dbContext )
{
_dynamoClient = dynamoClient;
_dbContext = dbContext;
}
public virtual async Task Save<T>(T item) where T : new()
{
await _dbContext.SaveAsync(item);
}
}
答案 0 :(得分:2)
使用attribute_not_exists
将条件表达式添加到您的PutItem请求中。
请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html中的“防止覆盖现有项目”一节
如果该项目已经存在,则条件表达式将导致ConditionalCheckFailedException
,您可以捕获并执行重试逻辑