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表中的属性将不会更新,并且仍然会在列表中包含一个项目。
这似乎是映射SDK中的一个错误。为了解决这个bug,我在下面添加了if语句:
group.tokens = group.accounts.Select(a => a.token).ToList();
if (group.tokens.Count == 0) group.tokens = null;
await Context.SaveAsync(group);
这将导致list属性被删除,并在从表中读取项目时映射到空列表。