【问题标题】:empty PrimitiveList is ignored by DynamoDBDynamoDB 忽略空 PrimitiveList
【发布时间】:2012-10-31 17:10:20
【问题描述】:

我在 DynamoDB 中保存用户配置文件,并使用属性将 .net 类型转换为 dynamo 条目

所以这是我正在使用的转换器:

public class DictRoomClassHouseInfoConverter : IPropertyConverter
{
    ...

    public DynamoDBEntry ToEntry(object value)
    {
        var dictionary = value as Dictionary<RoomClass, HouseInfo>;

        if (dictionary == null)
        {
            throw new ArgumentException("Invalid type");
        }

        var entry = new PrimitiveList();

        foreach (var kvp in dictionary)
        {
            entry.Add(new Primitive { Value = string.Format("{0}|{1}|{2}", (int)kvp.Key, kvp.Value.House, kvp.Value.TimesSold) });
        }

        return entry;
    }
}

现在的问题是,当字典为空并且ToEntry 返回一个空的PrimitiveList 时,不会保存此字典的更改

所以如果我这样做:

var profile = GetProfile(id);
//profile.DictProp has 3 items; 


profile.DictProp.Clear();
//profile.DictProp has 0 items;

SaveProfile(profile);

var p = GetProfile(id);
//profile.DictProp has 3 items; 

【问题讨论】:

    标签: .net amazon-web-services amazon amazon-dynamodb


    【解决方案1】:

    @jtlebi 正确回答该服务不接受空字符串或空集。 .NET SDK 在此基础上构建,如果您尝试保存一个空 PrimitiveList,SDK 将忽略此并且属性不会更改。

    但是,仍有一种方法可以删除属性:将 .NET 对象上的字段设置为 null 或从 IPropertyConverter.ToEntry 方法返回 null。然后,当您调用 DynamoDBContext.Save 时,SDK 将针对该特定属性发出 DELETE 命令。

    【讨论】:

    • 尝试在public DynamoDBEntry ToEntry中返回null,但和返回空PrimitiveList一样,属性不受影响
    • @Chuck Norris,确保您拥有最新版本的 SDK。这是最近添加的。
    • 使用 1.4 更新到最新,会告诉你进展如何
    • Thnx,更新到最新版本 (1.5.5.6) 并返回 null 而不是空 PrimitiveList 有效,但尚未尝试在返回空而不是 null 时是否有效
    【解决方案2】:

    如果您尝试保存具有空属性的元素,DynamoDB 将始终返回 ValidationException

    避免这种情况的唯一方法是在没有此字段的情况下保存项目。

    这就是说,我不知道 .NET SDK 但我很惊讶它不能自动处理这个?

    有关 DynamoDB 棘手限制的列表,请参阅 http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/Limits.html

    【讨论】:

    • 按属性是指.net属性还是其他东西,我的字典属性上有[DictRoomClassHouseInfoConverter]属性
    • 我明白了,我想你说的是这个限制:属性值 - 属性值不能为空或空。
    • 我指的是 DynamoDB 端的属性。我对 .NET 没有概念,所以我很难帮助解决这个具体案例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2012-04-22
    • 2019-10-15
    • 2014-03-27
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多