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

时间:2018-02-05 21:23:50

标签: c# amazon-web-services .net-core amazon-dynamodb

我目前在一个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>();
    }

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

    DynamoDBContext context;
    public ValuesController(IAmazonDynamoDB context)
    {
        this.context = new DynamoDBContext(context);
    }

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

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

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

在这篇文章中

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

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

1 个答案:

答案 0 :(得分:9)

QueryAsyncScanAsync只是映射到DynamoDB async-styleQuery操作的Scan方法。

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

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

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