如何在 DynamoDB 中存储具有重复项的字符串列表
How to store a list of strings with duplicates in DynamoDB
使用适用于 .net 的 AWS SDK 我正在尝试保存非唯一字符串的列表。此列表不是主哈希或任何其他内容,我只是希望能够按顺序引用它们并包含重复项。
模特
[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>();
}
}
控制器
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 });
当我运行上面的代码时,我得到:
"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.
我已经阅读了所有我能拿到的东西,但想不出解决这个问题的方法。也许我需要使用其他类型的集合,以便 Dynamo 知道这些项目不需要是唯一的。
查看 this blog post,其中详细介绍了 .NET SDK 如何将 List<string>
或 HashSet<string>
等 .NET 类型转换为 DynamoDB 数据类型。
总之,SDK默认为V1转换schema,其中List<string>
存储为DynamoDB SS类型,不允许重复项。您想要切换到使用 V2 转换模式。这可以通过多种方式完成:
1.Set 应用程序的转换:
<configSections>
<section name="aws" type="Amazon.AWSSection, AWSSDK"/>
</configSections>
<aws>
<dynamoDB conversionSchema="V2" />
</aws>
2.Set上下文转换:
var context = new DynamoDBContext(client, new DynamoDBContextConfig { Conversion = DynamoDBEntryConversion.V2 });
3.Set运算上的转换:
context.Save(account, new DynamoDBOperationConfig { Conversion = DynamoDBEntryConversion.V2 });
这些方法被列为渐进细化。切换转换模式将改变某些类型的存储方式(博客 post 对此进行了一些详细介绍),因此请考虑到这一点。
使用适用于 .net 的 AWS SDK 我正在尝试保存非唯一字符串的列表。此列表不是主哈希或任何其他内容,我只是希望能够按顺序引用它们并包含重复项。
模特
[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>();
}
}
控制器
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 });
当我运行上面的代码时,我得到:
"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.
我已经阅读了所有我能拿到的东西,但想不出解决这个问题的方法。也许我需要使用其他类型的集合,以便 Dynamo 知道这些项目不需要是唯一的。
查看 this blog post,其中详细介绍了 .NET SDK 如何将 List<string>
或 HashSet<string>
等 .NET 类型转换为 DynamoDB 数据类型。
总之,SDK默认为V1转换schema,其中List<string>
存储为DynamoDB SS类型,不允许重复项。您想要切换到使用 V2 转换模式。这可以通过多种方式完成:
1.Set 应用程序的转换:
<configSections>
<section name="aws" type="Amazon.AWSSection, AWSSDK"/>
</configSections>
<aws>
<dynamoDB conversionSchema="V2" />
</aws>
2.Set上下文转换:
var context = new DynamoDBContext(client, new DynamoDBContextConfig { Conversion = DynamoDBEntryConversion.V2 });
3.Set运算上的转换:
context.Save(account, new DynamoDBOperationConfig { Conversion = DynamoDBEntryConversion.V2 });
这些方法被列为渐进细化。切换转换模式将改变某些类型的存储方式(博客 post 对此进行了一些详细介绍),因此请考虑到这一点。