如何使用 DynamoDBContext 按全局二级索引进行查询

How query by global secondary index with DynamoDBContext

提问人:Vladimir Venegas 提问时间:6/16/2016 最后编辑:Vladimir Venegas 更新时间:9/1/2022 访问量:3085

问:

我有这个具有以下属性的类:

  1. ContactId -> HashKey
  2. 电子邮件 -> Global Seconday Index Hash Key
  3. CreatedAt -> 属性

实际上,我有这个方法,但是给我抛出一个异常,因为“Email”属性不是HashKey。如何使用二级索引和 DynamoDBContext 类获取项目?我找到了一些示例,但它们都使用低级 api。

public Contact Get(string email)
        {
            Contact entity = null;
            using (var context = new DynamoDBContext(new AmazonDynamoDBClient()))
            {
                entity = context.Load(new Contact() { Email = email });
            }
            return entity;
        }

编辑:实际上,这段代码对我有用。它假定“电子邮件”是唯一的:

public Contact Get(string email)
        {
            Contact entity = null;
            using (var context = new DynamoDBContext(new AmazonDynamoDBClient()))
            {
                entity = context.Query<Contact>(email, new DynamoDBOperationConfig {IndexName = "Email-index"}).FirstOrDefault();
            }
            return entity;
        }
C# .net 网络服务 亚马逊 dynamoDB aws-开发工具包

评论


答:

0赞 vak 9/1/2022 #1

如果将 .NET Core 或 .NET 5 及更高版本与异步 API 调用配合使用,则应执行以下操作。请注意 QueryAsync 方法和 GetRemainingAsync()。Result,返回已完成的查询任务的结果。

public Contact Get(string email)
{
    Contact entity = null;
    using (var context = new DynamoDBContext(new AmazonDynamoDBClient()))
    {
         entity = context.QueryAsync<Contact>(email, 
             new DynamoDBOperationConfig {IndexName = "Email-index"})
             .GetRemainingAsync().Result.FirstOrDefault();
    }
    return entity;
}