DynamoDB和.net对象持久化模型,使用'值,而不是覆盖

本文关键字:覆盖 使用 net 对象 持久化 DynamoDB 模型 | 更新日期: 2023-09-27 17:54:36

我有几个DynamoDB表,它们将充当聚合数据存储(我们正在动态地"累积"报告)。我希望使用。net:对象持久化模型(在其中构建带有注释的类)。问题是DynamoDBContext对象似乎只有一个"保存"方法,而不是一个"保存和添加值"方法。因为从Dynamo检索对象和再次写入该行之间的时间可能比微不足道的时间要长,并且可能有多个线程试图增加,所以我不希望在。net代码中完成增量。相反,我想使用。add AttributeAction。但我不确定是否可以使用对象持久化模型指定属性操作。有人知道这是可能的吗?

[DynamoDBTable("my_table")]
public class MyRecord
{
    [DynamoDBHashKey(AttributeName = "my_id")]
    public string MyID{ get; set; }
    /// <summary>
    /// Hash of the Region and Country fields for unique data lookup from DynamoDB
    /// </summary>
    [DynamoDBRangeKey(AttributeName = "location")]
    public string Location { get; set; }
    [DynamoDBProperty("my_count")]
    public int MyCount{ get; set; }
上面是一个示例对象。这个想法是,MyID获得几个代表用户操作的"计数"。我不希望得到mycount,然后在。net中添加1,然后重新推送。我宁愿运行'Add'命令,总是发送'1'到mycount,并让dynamo做数学来保证正确性。

DynamoDB和.net对象持久化模型,使用'值,而不是覆盖

由于我在这方面没有找到大量的资源,我决定为此编写自己的扩展方法。它不是完美的,因为你不能从上下文中推断出DBClient对象,因为它不是公共的,所以你必须把它传递进去。

https://gist.github.com/edgiardina/9815520

但是,我将不回答这个问题,因为我不知道是否有更简单的方法来执行它。