Ошибка: таблица не была зарегистрирована, в DynamoDB - PullRequest
0 голосов
/ 26 февраля 2019

Получение ошибки, так как таблица не была зарегистрирована при использовании pocodynamo для моей локальной динамической базы данных.Я пытаюсь выполнить операцию crud, но при вставке данных в локальную таблицу DynamodB я получаю сообщение об ошибке:

System.ArgumentNullException: "Tabel не был зарегистрирован: Todo. Имя параметра:таблица "

var awsDb = new AmazonDynamoDBClient("access key", "secret key", new AmazonDynamoDBConfig
        {
            ServiceURL = "http://localhost:8000",
        });
        var db = new PocoDynamo(awsDb);
        db.InitSchema();
var todos = 100.Times(i => new Todo { Content = "TODO " + i, Order = i });
        db.PutItems(todos);//getting error on this line

Я уже создал таблицу с помощью:

            //AWSSDK
            var request = new CreateTableRequest
            {
                TableName = "Todo",
                KeySchema = new List<KeySchemaElement>
            {
                new KeySchemaElement("Id", KeyType.HASH),
            },
                AttributeDefinitions = new List<AttributeDefinition>
            {
                new AttributeDefinition("Id", ScalarAttributeType.N),
            },
                ProvisionedThroughput = new ProvisionedThroughput
                {
                    ReadCapacityUnits = 10,
                    WriteCapacityUnits = 5,
                }
            };
            awsDb.CreateTable(request);

Убедитесь, что таблица создана и находится в активном состоянии:

                var startAt = DateTime.UtcNow;
        var timeout = TimeSpan.FromSeconds(60);
        do
        {
            try
            {
                var descResponse = awsDb.DescribeTable("Todo");
                if (descResponse.Table.TableStatus == DynamoStatus.Active)
                {
                    Console.WriteLine("table Todo is Active");
                    break;
                }
                Thread.Sleep(TimeSpan.FromSeconds(2));
            }
            catch (ResourceNotFoundException)
            {
                Console.WriteLine("resource not found");
                // DescribeTable is eventually consistent. So you might get resource not found.
            }

            if (DateTime.UtcNow - startAt > timeout)
                throw new TimeoutException("Exceeded timeout of {0}".Fmt(timeout));

        } while (true);

1 Ответ

0 голосов
/ 06 марта 2019

Проблема была не в коде, а в экземпляре DynamoDB.Я использовал загруженную локальную базу данных DynamoDB и запустил ее из командной строки в соответствии с документацией DynamoDB. Однако, когда я проверял AWS Explorer в visual studio, он говорит, что экземпляр был остановлен.Итак, окончательное решение для меня сработало: 1. Если DynamoDB был запущен вручную, остановите его!2. Убедитесь, что порт 8000 свободен. 3. Запустите DynamoDB из AWS Explorer. Вы закончили ..!

Чтобы запустить DynamoDB из AWS Explorer: 1. Откройте AWS Explorer 2. Выберите local (localhost) в раскрывающемся спискеРегион 3. Щелкните правой кнопкой мыши на Amazon DynamoDB и выберите «Подключиться к локальному DynamoDB». 4. Установите флажок «Начать новый локальный процесс DynamoDB».5. Установите последнюю версию 6. Убедитесь, что путь к java указан правильно (если java не установлен, установите его) 7. Нажмите кнопку ОК

...