如果项目哈希键已存在,如何让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')问题解决

初识字典1

如果存在,如何重命名哈希中的键

如何使用 Laravel 8 验证 MySQL 表中是不是存在哈希码

为啥 Ruby 象征着我的哈希键?

在字典中添加新项目或更新现有项目的方法