我正在使用适用于AWS DynamoDB的.NET SDK运行扫描。我这样做:
var result = context.Scan<Table>(new[] { new ScanCondition("AttributeName", ScanOperator.Equal, variable) }
抛出异常
“无法找到属性[AttributeName]”
的存储信息
属性AttributeName
是一个非索引属性,目前其中几乎没有任何值(它是我最近添加的新属性)。
我用Google搜索了错误&amp;我想出的只是sdk source code,我可以潜入其中,如果没有人能够启发我,我会的。
答案 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)
答案 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))