代码之家  ›  专栏  ›  技术社区  ›  JohnOpincar

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

  •  0
  • JohnOpincar  · 技术社区  · 6 年前

    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);
    

    如果集团账户为空(删除了最后一项),但事件组标记是一个空列表,则DynamoDB表中的属性将不会更新,并且仍将保留列表中的一项。

    1 回复  |  直到 6 年前
        1
  •  1
  •   JohnOpincar    6 年前

    这似乎是mapping 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属性,并在从表中读取项时映射到空列表。