为什么不从DynamoDb字符串列表属性中删除最后一个字符串,更新表中的项目

时间:2018-08-31 14:51:16

标签: c# .net amazon-dynamodb

DynamoDB .NET映射SDK不会将空列表持久保存到表中。实际上,这意味着从列表中删除最后一次并尝试将该项保存到表中将导致该属性不变(仍然具有最后一项)。如何将属性正确更新为空列表?

这是映射类的相关部分:

[DynamoDBTable("x.y.groups")]
public class Group : GroupListItem
{
    public List<string> tokens { get; set; }
}

以下是更新该字段的代码:

group.tokens = group.accounts.Select(a => a.token).ToList();
await Context.SaveAsync(group);

如果group.accounts为空(删除了最后一项),虽然group.tokens是一个空列表,则DynamoDB表中的属性将不会更新,并且列表中仍然只有一个项目。

1 个答案:

答案 0 :(得分:0)

这似乎是映射SDK中的错误。为了解决此错误,我在下面添加了if语句:

group.tokens = group.accounts.Select(a => a.token).ToList();
if (group.tokens.Count == 0) group.tokens = null;
await Context.SaveAsync(group);

这将导致list属性被删除,并且当从表中读取项目时,它将映射到一个空列表。