如何在DynamoDB中存储具有重复项的字符串列表

cal*_*rop 3 .net amazon-dynamodb aws-sdk

使用适用于.net的AWS开发工具包,我试图保存一个非唯一字符串列表。该列表不是主要的哈希或任何东西,我只希望能够按其顺序引用它们并包括重复项。

该模型

[DynamoDBTable("RMS.Accounts")]
public class Account
{
    [DynamoDBHashKey]
    public int Id { get; set; } 
    public string SomeValue { get; set; }
    public List<string> MoreValues{ get; set; }

    public Account()
    {
        // set default value
        MoreValues= new List<string>();
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器

Account account = new Account();
account.SomeValue = "testvalue";
account.MoreValues.Add("value1");
account.MoreValues.Add("value1");

var client = new AmazonDynamoDBClient();
var context = new DynamoDBContext(client);
context.Save(account, new DynamoDBOperationConfig() { SkipVersionCheck = true });
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我得到:

"An exception of type 'Amazon.DynamoDBv2.AmazonDynamoDBException' occurred in Apfm.RMS.Common.dll but was not handled in user code

Additional information: One or more parameter values were invalid: Input collection [value1, value1] contains duplicates.
Run Code Online (Sandbox Code Playgroud)

我已经阅读了所有可以动手的内容,但找不到解决方法。也许我需要使用其他种类的收藏,所以Dynamo知道这些物品不需要是唯一的。

Pav*_*nov 6

请参阅此博客文章,其中详细介绍了.NET SDK如何将.NET类型转换为DynamoDB数据类型List<string>或将其转换HashSet<string>为DynamoDB数据类型。

简而言之,SDK默认为V1转换架构,该架构List<string>存储为DynamoDB SS类型,不允许重复项。您要切换为使用V2转换架构。这可以通过多种方式完成:

1.设置应用程序的转换:

<configSections> <section name="aws" type="Amazon.AWSSection, AWSSDK"/> </configSections> <aws> <dynamoDB conversionSchema="V2" /> </aws>

2.根据上下文设置转换:

var context = new DynamoDBContext(client, new DynamoDBContextConfig { Conversion = DynamoDBEntryConversion.V2 });

3.在操作上设置转换:

context.Save(account, new DynamoDBOperationConfig { Conversion = DynamoDBEntryConversion.V2 });

这些方法被列为逐步粒度。切换转换模式将改变某些类型的存储方式(博客文章对此进行了详细介绍),因此请考虑到这一点。