DynamoDB OPM: сканирование на все, кроме «ScanCondition.IsNull», блокирует сканирование - PullRequest
0 голосов
/ 17 декабря 2018

Это мой класс, который я сопоставляю со своими таблицами DynamoDB:

[DynamoDBTable("things")]
public class DynamoThing {

    [DynamoDBHashKey(AttributeName = "id")]
    public string Id { get; set; }

    [DynamoDBProperty(AttributeName = "name")]
    public string Name { get; set; }

    [DynamoDBProperty(AttributeName = "tags")]
    public List<string> Tags { get; set; }

    [DynamoDBProperty(AttributeName = "containerId")]
    public string ContainerId { get; set; }
}

Вот как я пытаюсь сканировать:

public static async Task<IEnumerable<ThingViewModel>> ListAsync(Guid? containerId = null) {
    // initializing things for the client like key id, secret key etc.
    using (var client = new AmazonDynamoDBClient(accessKeyId, secretKey, clientConfig))
    using (var context = new DynamoDBContext(client)) {
        ScanCondition condition;
        if (containerId.HasValue) {
            var containerIds = new object[] { containerId.Value.ToString() };
            condition = new ScanCondition("ContainerId", ScanOperator.In, containerIds);
        } else {
            condition = new ScanCondition("ContainerId", ScanOperator.IsNull);
        }
        var scan = context.ScanAsync<DynamoThing>(new ScanCondition[] { condition });
        List<DynamoThing> slice;
        while ((slice = await scan.GetNextSetAsync()).Any()) {
            dynamoThings.AddRange(slice);
        }
    }
}

} Работает только ScanOperator.IsNull.При попадании в другую ветвь, ScanOperator.In, scan.GetNextSetAsync() блокирует поток.

Не все объекты на самом деле обладают свойством containerId.Это тот случай?Нужно ли добавлять пустые атрибуты containerId к каждому объекту?Или я делаю что-то еще не так или я нашел ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...