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

Gle*_*ven 6 .net amazon-web-services amazon-dynamodb

我正在使用.NET SDK for AWS DynamoDB运行扫描.我这样做:

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

这引发了异常

"无法找到属性[AttributeName]的存储信息"

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

我用谷歌搜索了错误,我想出的是sdk源代码,我可以深入研究,如果没有人可以启发我的话.

Dha*_*777 10

这也吸引了我,分享我的发现希望它可以帮助别人,我正在使用 C# 对象持久模型。

DynamoDb 中的列名称采用驼峰式大小写。C# 类属性则不然。

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

    [DynamoDBProperty("songTitle")]
    [DynamoDBRangeKey]
    public string SongTitle { get; set; }
    
Run Code Online (Sandbox Code Playgroud)

因此以下会引发错误,

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

修理,

scanConditions.Add(new ScanCondition("SongTitle", ScanOperator.BeginsWith, searchReq.SongTitle));
            if (!string.IsNullOrEmpty(searchReq.Difficulty))
Run Code Online (Sandbox Code Playgroud)


Jim*_*gan 4

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

T如果该类没有该名称的公共属性,或者该属性被显式标记为 ,则将引发该异常[DynamoDBIgnore]

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