Как сделать условную запись в DynamodB с ServiceStack.Aws

В DynamodB вы можете сделать условную запись (см. Здесь и здесь).

Теперь я использую 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

1 ответ

Решение

Я только что добавил поддержку 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, вы можете получить доступ к клиенту Dynamo DB, лежащему в основе AWS, с помощью db.DynamoDb,

Новый UpdateExpression<T> Builder доступен с версии 4.0.61, которая теперь доступна на MyGet.

Другие вопросы по тегам