如何使用 ServiceStack.Aws 在 dynamodb 中进行条件写入

how do a conditional write in dynamodb with ServiceStack.Aws

在 dynamodb 中,您可以进行条件写入(参见 here and here)。

现在,我正在使用 ServiceStack.Aws,我想知道如何实现这一点(条件写入)

我的代码如下所示

var awsDb = new AmazonDynamoDBClient();
var db = new PocoDynamo(awsDb);
db.UpdateItem<Country>(new Country{CountryId = 1, Name = "New Name"});

我的模型是这样的

[Alias("TABLE-NAME")]
public class Country
{
    [AutoIncrement]
    public int CountryId { get; set; }
    public string Name { get; set; }
    public string Culture { get; set; }
    public int State { get; set; }
}

但我只想在 0

中有 "state" 属性 时更新此项目

我刚刚在 this commit 中添加了 Typed UpdateExpression 支持,这将允许您使用表达式生成器来构建更新查询,您可以像这样使用它:

var q = db.UpdateExpression<Country>(1)
    .Set(() => new Country { Name = "New Name" })
    .Condition(x => x.State == 0);

bool wasUpdated = db.Update(q);

就像 PocoDynamo 的查询和扫描表达式构建器一样,UpdateExpression<T> 继承了 AWS 的 UpdateItemRequest,您可以使用它在发送之前进一步自定义 UpdateItemRequest。此外,当 PocoDynamo 中未涵盖某个功能时,您可以使用 db.DynamoDb.

访问 AWS 的底层 Dynamo DB 客户端

新的 UpdateExpression<T> 构建器可从 v4.0.61 开始使用,现在 available on MyGet