无法转换属性的范围键值

时间:2015-04-15 06:24:05

标签: c# amazon-dynamodb amazon nosql

我使用DynamoDB和C#驱动程序,我有一个用户表。该表具有以下两个主键:

  • 主哈希键:UserId(数字)
  • 主范围键:已创建(字符串)

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

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

然后我得到以下例外:

  

&#34; exceptionMessage&#34;:&#34;无法转换属性的范围键值   创建&#34;,&#34; exceptionType&#34;:&#34; System.InvalidOperationException&#34;

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

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

一切都好。

是否有办法只使用主哈希键加载一个键入的用户,即使该表有一个范围键?每次我需要获取用户时,我都不想发送创建日期。或者我是否想过了解dynamoDB中范围键的概念?

1 个答案:

答案 0 :(得分:8)

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

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

  

对于主键,您必须提供所有属性。对于   例如,使用哈希类型主键,您只需要提供   哈希属性。对于散列和范围类型的主键,您必须   提供hash属性和range属性。

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

如果您的表的主键由Hash和Range Key组成,那么您必须提供两者以匹配单个项目。

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

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

在dynamodb表中使用Hash范围有什么用? What is the use of a Hash range in a dynamodb table?

何时使用什么PK类型? DynamoDB: When to use what PK type?