0

阅读 DynamoDB 文档,似乎没有办法在插入数据时不列出每个属性名称/值。

例如,要插入一个用户,我需要这样做:

var putRequest = new PutItemRequest
    {
        TableName = UsersTableName,
        Item = new Dictionary<string, AttributeValue>()
            {
                {"HashId", new AttributeValue() { S = user.Id.ToString() }},
                {"RangeId", new AttributeValue() { S = user.Email }},
                {"CreatedUtc", new AttributeValue() { S = user.CreatedUtc.ToString() }},
                {"DeactivatedUtc", new AttributeValue() { S = user.DeactivatedUtc.ToString() }},
                {"Timezone", new AttributeValue() { S = "US Eastern Standard Time" }},
            }
    };

var result = DbClient.PutItem(putRequest);

我喜欢 RavenDb 模型,它接受任何 POCO 并根据类的公共字段名称自行确定“属性”名称。

我的问题是:我需要这样做吗?是否可以仅通过传递对象来写入数据?

如果不是,我会写一些东西:我将使用反射来找出名称和类型,并PutItemRequest.Item基于它生成字典。如果没有必要,我宁愿不要。

与往常一样,提前感谢您的帮助!

4

2 回答 2

2

在每个putItem请求上,您都应该指定要存储的所有属性。如果您错过了其中一些 - 它们的值将从 DynamoDB 中删除。目前没有解决方法。要更改一个属性,您应该getItem首先在内存中更改它,然后将其更改putItem回 DynamoDB。

于 2013-09-27T19:23:27.423 回答
1

实际上,亚马逊已经有了我一直在寻找的东西:.NET 对象持久性模型

这会为您序列化您的对象 - 太棒了!

于 2013-10-11T00:10:29.620 回答