使用DynamoDB检索表中的所有项目

wjv*_*vic 5 c# amazon-web-services amazon-dynamodb .net-core

我目前在Web服务类中,对于我正在进行的项目,我决定使用.NET Core平台创建Web API,将DynamoDB作为数据库.

到目前为止,让Dynamo使用.NET Core有点困难,因为我似乎找不到太多关于让两者一起工作的文章.我目前停留在如何从特定表中检索所有项目.

我一直在阅读Dynamo文档,并决定使用Object Persistence模型.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
        services.AddAWSService<IAmazonDynamoDB>();
    }
Run Code Online (Sandbox Code Playgroud)

我在Startup文件的Configure Services方法中注入DynamoDB上下文.然后我像这样将它注入控制器

    DynamoDBContext context;
    public ValuesController(IAmazonDynamoDB context)
    {
        this.context = new DynamoDBContext(context);
    }
Run Code Online (Sandbox Code Playgroud)

同样,我绝不是这两种技术的专家,所以如果有更好的方法,请告诉我.

我还有一个我从DynamoDB文档中获得的简单模型.

[DynamoDBTable("AnimalsInventory")]
public class Item
{
    [DynamoDBHashKey]
    public Guid Id { get; set; }
    [DynamoDBRangeKey]
    public string Type { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在这篇文章中

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBContext.QueryScan.html

它说你可以使用Query/Scan方法从数据库中检索项目,但不幸的是,.NET Core平台不支持这些方法.在.NET Core上,它们被称为QueryAsync和ScanAsync,我想也许我可以在没有任何参数的情况下调用该方法,它只会检索表中的任何项目,但这不起作用.看起来这个方法特别适用于某些扫描条件,所以我不确定我是否使用了错误的方法,或者是否无法从表中检索任何和所有项目.

Mik*_*scu 13

QueryAsyncScanAsync只是异步式的方法映射到DynamoDB 查询扫描操作.

您应该能够使用以下内容扫描表格中的所有项目:

var conditions = new List<ScanCondition>();
// you can add scan conditions, or leave empty
var allDocs = await context.ScanAsync<Item>(conditions).GetRemainingAsync();
Run Code Online (Sandbox Code Playgroud)

我建议从Scan API的文档开始.它将解释没有任何客户端细节的实际API.您将学习分页,过滤表达式等.然后,如果您不熟悉async/await,请阅读.最后将它们放在一起,您应该能够在自己的应用程序中使用QueryAsync和ScanAsync.

  • 成功了,感谢您的帮助和阅读材料! (2认同)
  • 我建议开始一个单独的线程,因为这是一个完全不同的问题。不要学究气,但是 a) 它实际上可能会帮助其他人搜索相同的内容(与这些评论相反)和 b) 我实际上不确定 - 我认为你实际上可能会在一个专注于的新问题上得到更好的答案具体那个问题 (2认同)