You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#操作DynamoDB插入相同主键数据如何避免覆盖原有数据

DynamoDB插入相同主键不覆盖原有数据的实现方案

DynamoDB的PutItem默认逻辑就是主键存在则覆盖整条数据,要实现不覆盖的写入,只需要调整条件表达式规则即可,你现有代码的条件逻辑写反了。

现有代码的问题

  • 你当前使用的ConditionExpression = "attribute_exists(pk)"规则是要求主键已存在时才允许执行写入,和你的需求完全相反
  • 你代码里的主键属性是User,条件表达式里写的pk和实际主键属性名不匹配,即使逻辑对也不会生效
  • 多余配置了ExpressionAttributeValues,这个场景不需要额外传变量

修正后的代码

var putItemRequest = new PutItemRequest
{
    TableName = "MovieRating",
    Item = new Dictionary<string, AttributeValue>
    {
        { "User",  new AttributeValue { S = movieRating.User } },
        { "Comment",  new AttributeValue { S = movieRating.Comment } },
        { "MovieTitle",  new AttributeValue { N = movieRating.MovieTitle.ToString() } },
        { "Rate",  new AttributeValue { N = movieRating.Rate.ToString() } }
    },
    // 核心规则:仅当主键User不存在时才执行写入
    ConditionExpression = "attribute_not_exists(User)"
};

执行逻辑说明

请求提交后,如果对应User主键已存在,DynamoDB会抛出ConditionalCheckFailedException异常,捕获该异常即可判定为重复写入,原有数据不会被覆盖。

内容的提问来源于stack exchange,提问作者Nooty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:36:10