首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DynamoDB Conditional SaveAsync

DynamoDB Conditional SaveAsync
EN

Stack Overflow用户
提问于 2019-08-17 19:50:16
回答 1查看 432关注 0票数 1

我使用了以下代码:

代码语言:javascript
运行
复制
DynamoDBContextConfig config = new DynamoDBContextConfig()
{
    ConsistentRead = false,
    Conversion =  DynamoDBEntryConversion.V2
};

using (DynamoDBContext context = new DynamoDBContext(config))
{
    long unixTimestamp = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
    QTrackStatus qTrackStatus = new QTrackStatus()
    {
        Key = "m@m.com",
        EventCode = "CC",
        EventDateTime = "2019-09-09 14:00:30",
        EventLocation = "BFS",
        EventLastUpdate = unixTimestamp
    };

    DynamoDBOperationConfig dynamoDBOperationConfig = new DynamoDBOperationConfig()
    {
        QueryFilter = new List<ScanCondition>()
        {
            { new ScanCondition("EventCode", ScanOperator.NotEqual, "CC") }
        },
        ConditionalOperator = ConditionalOperatorValues.And
    };

    await context.SaveAsync(qTrackStatus, dynamoDBOperationConfig);
}

我要做的是只有在EventCode不是CC的情况下才保存记录。目前,它总是在保存。我可以首先检索记录,进行检查,然后在需要时调用SaveAsync -但是我希望在SaveAsync调用中完成所有这些工作。这个是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-18 21:24:34

除非我遗漏了什么,否则使用更高级别的api看起来是不可能的。我最终重新分解成以下几个部分:

代码语言:javascript
运行
复制
AmazonDynamoDBClient client = new AmazonDynamoDBClient();

UpdateItemRequest updateItemRequest = new UpdateItemRequest()
{
    TableName = "QTrackStatus",
    ReturnValues = ReturnValue.ALL_NEW,
    ConditionExpression = "EventCode <> :ec",
    UpdateExpression = "SET EventCode = :ec, EventDateTime = :edt, EventLocation = :el, EventLastUpdate = :elu",
    ExpressionAttributeValues = new Dictionary<string, AttributeValue>()
    {
        { ":ec", new AttributeValue("CC") },
        { ":edt", new AttributeValue("2019-09-09 14:00:30") },
        { ":el", new AttributeValue("BFS") },
        { ":elu", new AttributeValue() { N = ((long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds).ToString() } }
    },
    Key = new Dictionary<string, AttributeValue>()
    {
        { "Key", new AttributeValue("m@m.com") }
    }
};

try
{
    UpdateItemResponse updateItemResponse = await client.UpdateItemAsync(updateItemRequest);
}
catch(ConditionalCheckFailedException e)
{

}

这让我可以实现我的目标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57536030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档