0

将 pocodynamo 用于我的本地 dynamodb 时出现错误,因为该表尚未注册。我正在尝试进行 crud 操作,但是在将数据插入本地 dynamodb 表时,出现错误

System.ArgumentNullException:“表尚未注册: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);
4

1 回答 1

0

问题不在于代码,而在于 DynamoDB 实例。我正在使用下载的本地 DynamoDB 数据库并根据 DynamoDB 文档通过命令提示符启动它,但是,当我在 Visual Studio 中检查 AWS Explorer 时,它说实例已停止。所以最终对我有用的解决方案是: 1. 如果 DynamoDB 是手动启动的,请停止它!2. 确保端口 8000 空闲 3. 从 AWS Explorer 启动 DynamoDB 大功告成..!

要从 AWS Explorer 启动 DynamoDB: 1. 打开 AWS Explorer 2. 从区域 3 的下拉列表中选择本地 (localhost)。右键单击 Amazon DynamoDB 并选择“连接到本地 DynamoDB” 4. 选中“启动新的 DynamoDB 本地进程”。5.安装最新版本 6.确保java的路径正确(如果没有安装java,安装它) 7.点击OK按钮

于 2019-03-06T06:16:26.013 回答