web-dev-qa-db-fra.com

Récupération de tous les éléments d'une table avec DynamoDB

Je suis actuellement dans une classe de services Web, et pour le projet sur lequel je travaille, j'ai décidé de créer une API Web en utilisant la plate-forme .NET Core, avec DynamoDB comme base de données.

Jusqu'à présent, il a été un peu difficile de faire fonctionner Dynamo avec .NET Core car je n'arrive pas à trouver trop d'articles pour faire fonctionner les deux ensemble. Je suis actuellement bloqué sur la façon de récupérer tous les éléments d'une table spécifique.

J'ai lu la documentation Dynamo et j'ai décidé d'utiliser le modèle Object Persistence.

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

        services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
        services.AddAWSService<IAmazonDynamoDB>();
    }

J'injecte le contexte DynamoDB dans la méthode Configure Services du fichier de démarrage. Ensuite, je l'injecte dans le contrôleur comme ça

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

Encore une fois, je ne suis en aucun cas un expert de ces deux technologies, donc s'il y a une meilleure façon de le faire, faites-le moi savoir.

J'ai également un modèle simple que j'utilise que j'ai obtenu de la documentation DynamoDB.

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

Dans cet article ici

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

il indique que vous pouvez simplement utiliser les méthodes Query/Scan pour récupérer des éléments de la base de données, mais malheureusement, ces méthodes ne sont pas prises en charge sur la plate-forme .NET Core. Sur .NET Core, ils sont appelés QueryAsync et ScanAsync, et j'ai pensé que je pourrais peut-être simplement appeler la méthode sans aucun argument et qu'elle récupérerait simplement tous les éléments du tableau, mais cela n'a pas fonctionné. Il semble que la méthode prenne spécifiquement dans certaines conditions d'analyse, donc je ne suis pas sûr si j'utilise les mauvaises méthodes, ou s'il n'y a aucun moyen de simplement récupérer tous les éléments d'une table.

7
wjvukasovic

Les méthodes QueryAsync et ScanAsync ne sont que de style asynchrone qui correspondent aux opérations DynamoDB Requête et Scan .

Vous devriez être en mesure de numériser tous les éléments de votre table en utilisant quelque chose comme ceci:

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

Je recommande de commencer par la documentation de Scan API . Il expliquera l'API réelle sans spécificité client. Vous en apprendrez plus sur la pagination, les expressions de filtrage, etc. Enfin, assemblez-les et vous devriez pouvoir utiliser QueryAsync et ScanAsync dans votre propre application.

14
Mike Dinescu