C# 为什么我的表创建在尝试重新创建已删除的DynamoDB表时失败?

C# 为什么我的表创建在尝试重新创建已删除的DynamoDB表时失败?,c#,amazon-dynamodb,C#,Amazon Dynamodb,我在DynamoDB有一张简单的桌子 名称:测试 主分区键:ID 我已经读到,高效清空DynamoDB表的方法是删除该表,然后重新创建它 所以,我写了这个: public bool DeleteAllRecords() { DeleteTableRequest deleteTableRequest = new DeleteTableRequest { TableName = "TEST" }; TableDescription tableDescr

我在DynamoDB有一张简单的桌子

名称:测试

主分区键:ID

我已经读到,高效清空DynamoDB表的方法是删除该表,然后重新创建它

所以,我写了这个:

public bool DeleteAllRecords()
{
    DeleteTableRequest deleteTableRequest = new DeleteTableRequest
    {
       TableName = "TEST"
    };

    TableDescription tableDescription = _dynamoDbClient.DeleteTable(deleteTableRequest).TableDescription;

    CreateTableRequest createTableRequest = new CreateTableRequest
    {
        TableName = tableDescription.TableName,
        AttributeDefinitions = tableDescription.AttributeDefinitions,
        KeySchema = tableDescription.KeySchema,
        ProvisionedThroughput = new ProvisionedThroughput
        {
           ReadCapacityUnits = tableDescription.ProvisionedThroughput.ReadCapacityUnits,
           WriteCapacityUnits = tableDescription.ProvisionedThroughput.WriteCapacityUnits
        }
    };

    CreateTableResponse response = _dynamoDbClient.CreateTable(createTableRequest);

    return true;
}
当我运行上面的程序时,我得到了这个异常

检测到2个验证错误:“keySchema”处的值null未能满足约束:成员不能为null;“attributeDefinitions”处的值null未能满足约束:成员不能为null

tableDescription中返回的keySchema和attributeDefinitions的值是空列表。
如果表中没有这些值,则从何处/如何获取这些值;记住,它们可能在某一点上具有价值

你需要先做一个
可描述的
。这将返回您要查找的值。
deletetetetable
操作中的响应主要用于提供
TableStatus


请记住,删除操作不是即时的,因此您需要在创建新表之前检查表的状态。如果表仍在删除,您将无法创建新表。

鉴于大多数AWS操作的异步性质,以下流程将是正确的:

  • 以捕获现有表的详细信息

  • (异步)

在deletetetable请求之后,指定的表处于删除状态,直到DynamoDB完成删除。如果表处于活动状态,则可以将其删除。如果一个表处于创建或更新状态,那么DynamoDB将返回ResourceInUseException。如果指定的表不存在,DynamoDB将返回ResourceNotFoundException。如果表已处于删除状态,则不会返回任何错误

  • 同样,直到
    ResourceNotFoundException
  • (异步)
收到CreateTable请求后,DynamoDB立即返回一个响应,其中表状态为CREATING。创建表后,DynamoDB将表状态设置为ACTIVE。只能对活动表执行读写操作

[…]您可以使用可描述的操作来检查表状态

  • 直到直到
    TableStatus==“活动”

所有引用都来自本文中包含的链接

检测到“仍在删除”或等待“被删除”不应该是涵盖删除操作的正常锁定/事务的一部分吗?不确定“正常锁定/事务”是什么意思我只知道对
DeleteTable
的调用在表实际删除之前返回。“我只知道对DeleteTable的调用在表实际删除之前返回。”这是一个非常不幸的设计决策,也是一个很好的建议。从正常的DML语句中,我有点希望在尝试新的操作之前正确完成上一个操作。确保旧表至少在数据库中的“table of Tables”之外听起来应该是安全的。DynamoDB与“普通”数据库有很大的不同,像“table of Tables”这样的大多数概念实际上并不适用于它。在任务完成之前,异步API调用返回是“正常的”。