如果项目哈希键已存在,如何让DynamoDbContext在Save上抛出异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果项目哈希键已存在,如何让DynamoDbContext在Save上抛出异常相关的知识,希望对你有一定的参考价值。
我正在DynamoDB中创建一个新项目,如果哈希键已经存在,我希望它抛出异常。我想要这个,因为出于性能原因,我不想在插入之前查询项目,因为我的密钥极不可能发生冲突。但如果确实如此,我想用新密钥重试。目前,当我通过对象级别api调用Save时,它只是更新记录。
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);
}
}
答案
使用attribute_not_exists
将条件表达式添加到PutItem请求中。
请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html中的“防止覆盖现有项目”部分
如果项目已经存在,条件表达式将导致ConditionalCheckFailedException
,您可以捕获它然后执行重试逻辑
以上是关于如果项目哈希键已存在,如何让DynamoDbContext在Save上抛出异常的主要内容,如果未能解决你的问题,请参考以下文章
mycat 添加数据时报错主键已存在(duplicate entry '22' for key 'PRIMARY')问题解决