我正在使用.NET object persistence model与DynamoDB,并使用DynamoDBVersion
属性内置optimistic locking。
[DynamoDBTable("items")]
public class MyItem
{
[DynamoDBHashKey]
public string Id { get; set; }
[DynamoDBVersion]
public int? Version { get; set; }
}
保存操作
使用DynamoDBContext
很简单。
await _dbContext.SaveAsync(item);
最近我添加了自定义更新条件,将保存操作更改为以下内容。
var table = _dbContext.GetTargetTable<MyItem>();
await table.UpdateItemAsync(_dbContext.ToDocument(item), new UpdateItemOperationConfig
{
ConditionalExpression = ...
});
这似乎打破了内置的乐观锁定,并且表中的所有项都不包含Version
属性。有没有办法将该属性与条件写入一起使用,或以某种方式使用低级.NET SDK手动实现乐观锁定?
答案 0 :(得分:0)
您期望在ConditionalExpression中添加什么?您必须拥有对象客户端,否则乐观锁定将阻止更新发生。那么您应该能够在客户端进行任何条件检查吗?
请注意,您必须先加载一个对象,然后才能使用乐观锁定进行保存。你是先加载对象吗?