.net DynamoDB忽略空的原语列表

0yg35tkg  于 2023-03-13  发布在  .NET
关注(0)|答案(2)|浏览(150)

我将用户配置文件保存在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;
laik7k3q

laik7k3q1#

@jtlebi正确地回答了服务不接受空字符串或空集,.NET SDK建立在此基础上,因为如果您试图保存空PrimitiveList,SDK将忽略这一点,并且属性不会更改。
但是,仍然有一种方法可以删除属性:将.NET对象上的字段设置为null或从IPropertyConvert.ToEntry方法返回null。然后,当您调用DynamoDBContext.保存时,SDK将为该特定属性发出DELETE命令。

inb24sb2

inb24sb22#

如果您试图保存一个属性为空的元素,DynamoDB将始终返回一个ValidationException
避免此问题的唯一方法是保存不带此字段的项目。
也就是说,我不知道.NET SDK,但我很惊讶它不能自动处理这个问题?
有关DynamoDB棘手限制的列表,请参见http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/Limits.html

相关问题