使用DynamoDB时“无法找到属性的存储信息”是什么意思?

时间:2013-12-27 09:36:49

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

我正在使用适用于AWS DynamoDB的.NET SDK运行扫描。我这样做:

var result = context.Scan<Table>(new[] { new ScanCondition("AttributeName", ScanOperator.Equal, variable) }

抛出异常

  

“无法找到属性[AttributeName]”

的存储信息

属性AttributeName是一个非索引属性,目前其中几乎没有任何值(它是我最近添加的新属性)。

我用Google搜索了错误&amp;我想出的只是sdk source code,我可以潜入其中,如果没有人能够启发我,我会的。

3 个答案:

答案 0 :(得分:2)

DynamoDBContext.Scan<T>()方法仅接受使用T属性映射到该表的类[DynamoDBTable()]的公共属性的名称。 Scan<T>无法识别表格中未映射的属性。

如果类T没有该名称的 public 属性,或者属性明确标记为[DynamoDBIgnore],则会抛出该异常。

如果需要扫描表中未建模的表属性,可以使用AmazonDynamoDBClient.Scan()提供的低级API,但不会返回T类型的对象。

答案 1 :(得分:1)

你的陈述是:

var result = context.Scan<Table>(new[] { new ScanCondition("AttributeName", ScanOperator.Equal, variable) }

根据DynamoDB文档,您需要传递&#34; propertyName&#34;取代&#34; AttributeName&#34;。

DynamoDB文档说:

public ScanCondition(
string propertyName,
ScanOperator op,
params Object[] values)

参考:http://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/M_Amazon_DynamoDB_DataModel_ScanCondition__ctor.htm

答案 2 :(得分:0)

这也让我受益,分享我的发现希望它可以帮助某人,我正在使用 C# 对象持久模型。

DynamoDb 中的列名采用驼峰式命名。 C# 类属性不是。

[DynamoDBProperty("artist")]
    [DynamoDBHashKey]
    public string Artist { get; set; }

    [DynamoDBProperty("songTitle")]
    [DynamoDBRangeKey]
    public string SongTitle { get; set; }
    

因此以下抛出错误,

scanConditions.Add(new ScanCondition("songTitle", ScanOperator.BeginsWith, searchReq.SongTitle));
            if (!string.IsNullOrEmpty(searchReq.Difficulty))

要修复,

scanConditions.Add(new ScanCondition("SongTitle", ScanOperator.BeginsWith, searchReq.SongTitle));
            if (!string.IsNullOrEmpty(searchReq.Difficulty))