使用IAmazonDynamoDB或IDynamoDBContext(两者?)

问题描述 投票:1回答:1

我从AWS SDK模板启动了我的Visual Studio项目。它在函数中使用IDynamoDBContext,在测试中使用IAmazonDynamoDB。当我收到带有id(哈希)的文件时,一切都能保存和接收文件。但是当我在我的桌子上添加一个范围时它停止工作了。我所有的测试都是针对AWS dynamoDb的。但我让它以两种方式工作。第一种方式是我下载了dynamoDb的本地实例。第二个是我在我的函数中将IDynamoDBContext替换为IAmazonDynamoDB(因此它在函数和我的测试类中都使用了相同的接口)。我不知道正确的解决方案是什么,但为什么首先使用2个接口?我应该继续深入研究为什么它不能用于不同的接口,或者我应该只使用其中一个?

        // IDynamoDBContext (default) - Didn't save my item (did save it in local DynamoDB)
        var test = new Test
        {
            UserId = "Test",
            Id = 1
        };

        await DDBContext.SaveAsync<Test>(test);

        // IAmazonDynamoDB - Did save my item
        var putItemRequest = new PutItemRequest
        {
            TableName = "TestTable",
            Item = new Dictionary<string, AttributeValue>()
            {
                { "UserId", new AttributeValue { S = "Test" }},
                { "Id", new AttributeValue { N = "1" }}
            }
        };
        await DDBContext.PutItemAsync(putItemRequest);

我的测试:

            var item = new GetItemRequest
        {
            TableName = "TestTable",
            Key = new Dictionary<string, AttributeValue>
            {
                { "UserId", new AttributeValue { S = "Test" } },
                { "Id", new AttributeValue { N = "1" } },
            },
        };
        Assert.True((await this.DDBClient.GetItemAsync(item)).Item.Count > 0);
c# amazon-web-services amazon-dynamodb amazon-cloudformation aws-sdk-net
1个回答
2
投票

我们可能需要AWS .Net SDK团队中的某个人与此对话,但这是我最好的见解。

亚马逊文档总是很有趣。

文档并没有过于清楚,但IDynamoDBContext位于用于对象持久性数据访问的Amazon.DynamoDbv2.DataModel命名空间中。

所以我认为IAmazonDynamoDB接口用于针对DynamoDB服务的一般API调用。这两种模式具有重叠功能,因为它们都可以与dynamoDb表中的给定项一起使用。

当然,对于IDynamoDbContext来说,文档非常清楚

用于使用DynamoDB的数据模型模型的上下文接口。用于与服务交互,保存/加载对象等。

https://docs.aws.amazon.com/sdkfornet/v3/apidocs/Index.html

对于IAmazonDynamoDB,它说

用于访问DynamoDB Amazon DynamoDB的界面

IAmazonDynamoDB来自Amazon.DynamoDbv2命名空间,IDynamoDBContext位于Amazon.DynamoDbv2.DataModel

如果您查看它们的文档,虽然您将通过查看方法看到每个可以执行的操作是非常不同的。

IAmazonDynamoDb allows您可以通过以下方式与DynamoDb互动并开展更多工作:

  • 创建表
  • 删除表格
  • 创建全局索引和备份
  • 等等

您仍然可以直接使用项目,但通过此接口可用的API调用数量更大,并允许使用整个DynamoDB服务。

IDynamoDBContext allows中,您可以使用以下方法直接处理给定DynamoDb表中的项目:

  • 保存
  • 询问
  • 扫描
  • 加载

一致性始终是编程的关键,因此请始终对要执行相同工作级别的区域使用相同的界面。所以你的代码和测试应该使用相同的接口,因为它们集中在同一个工作范围。希望在此额外说明的基础上,您知道自己所使用的界面。如果您的所有代码都尝试使用DynamoDb表中的项目,那么IDynamoDBContext可能就是您所追求的。

© www.soinside.com 2019 - 2024. All rights reserved.