如果项目哈希键已存在,我如何让DynamoDbContext在保存上引发异常

时间:2018-07-20 01:59:28

标签: c# amazon-dynamodb

我正在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);
    }
}

1 个答案:

答案 0 :(得分:2)

使用attribute_not_exists将条件表达式添加到您的PutItem请求中。

请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html中的“防止覆盖现有项目”一节

如果该项目已经存在,则条件表达式将导致ConditionalCheckFailedException,您可以捕获并执行重试逻辑