无法转换 属性 的范围键值

Unable to convert range key value for property

我将 dynamoDB 与 C# 驱动程序一起使用,并且我有一个 table 用户。 table 有以下两个主键:

然后我尝试在上下文中使用 Load 方法加载用户,如下所示:

_dynamoDBClient.Context.Load<User>(12345);

然后我得到以下异常:

"exceptionMessage": "Unable to convert range key value for property Created", "exceptionType": "System.InvalidOperationException"

如果我加载特定范围键,例如:

_dynamoDBClient.Context.Load<User>(12345, "2015-01-01");

一切正常。

即使 table 有一个范围键,有没有一种方法可以仅使用主哈希键来加载键入的用户?我不想每次需要获取用户时都发送创建日期。还是我误解了 dynamoDB 中范围键的概念?

Load 方法用于从您的 table 中检索单个项目,因此您需要提供完整的主键。

在幕后,Load 方法实际上从本地 AWS DynamoDB API 调用 GetItem 操作,它对需要提供的属性有以下要求:

For the primary key, you must provide all of the attributes. For example, with a hash type primary key, you only need to provide the hash attribute. For a hash-and-range type primary key, you must provide both the hash attribute and the range attribute.

来源: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html

如果您的 table 的主键由散列键和范围键组成,那么您必须提供两者才能匹配单个项目。

现在谈到您的数据模型时,范围键用于对通常一起检索的相关记录进行分组。在您的情况下,我假设还有其他用户具有相同的 UserId 但创建日期不同。如果您不需要将用户分组在一起(并按创建日期排序),那么只需要哈希键就足够了。

另外两篇文章可能会帮助您确定用于不同场景的正确密钥类型:

dynamodb 中的哈希范围有什么用table?

什么时候使用什么PK类型?