DynamoDBContext 类 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

DynamoDBContext 类

这些区域有:DynamoDBContext类是 Amazon DynamoDB 数据库的入口点。它提供到 DynamoDB 的连接,让您能够访问各个表中的数据、执行各种 CRUD 操作,以及运行查询。这些区域有:DynamoDBContext类提供了以下方法。

创建多表批获取

创建MultiTableBatchGet对象,由多个单独BatchGet对象。每个都是BatchGet对象可用于从单个 DynamoDB 表中检索项目。

要从表检索项目,请使用ExecuteBatchGet方法,传递MultiTableBatchGet对象作为参数。

创建多表批写入

创建MultiTableBatchWrite对象,由多个单独BatchWrite对象。每个都是BatchWrite对象可用于写入或删除单个 DynamoDB 表中的项目。

要写入表,请使用ExecuteBatchWrite方法,传递MultiTableBatchWrite对象作为参数。

创建批处理获取

创建BatchGet对象,您可以使用该对象从表检索多个项目。有关更多信息,请参阅Batch 获取:获取多个项目

创建批写入

创建BatchWrite对象,您可以使用该对象将多个项目放入表中,或者从表中删除多个项目。有关更多信息,请参阅Batch 写入:放置和删除多个项目

Delete

删除表中的项目。该方法需要要删除的项目的主键。您可以提供主键值或包含主键值的客户端对象作为此方法的参数。

  • 如果将客户端对象指定为参数,并且启用了乐观锁定,则只有在对象的客户端版本和服务器端版本匹配时,删除才会成功。

  • 如果仅将主键值指定为参数,则无论您是否启用了乐观锁定,删除都会成功。

注意

要在后台执行此操作,请使用DeleteAsync方法。

Dispose

处置所有托管和非托管资源。

执行批处理获取

从一个或多个表中读取数据,从而处理所有BatchGet中的对象MultiTableBatchGet

注意

要在后台执行此操作,请使用ExecuteBatchGetAsync方法。

执行批写入

在一个或多个表中写入或删除数据,从而处理所有BatchWrite中的对象MultiTableBatchWrite

注意

要在后台执行此操作,请使用ExecuteBatchWriteAsync方法。

FromDocument

给定一个DocumentFromDocument方法返回客户端类的实例。

如果要将文档模型类与对象持久化模型一起使用来执行任何数据操作,这将非常有用。有关文档模型类的更多信息,请参阅文档的更多信息。Amazon SDK for .NET,请参阅.NET: 文档模型

假设您有一个Document名为doc,其中包含Forum项目。(要了解如何构建此对象,请参阅ToDocument方法。) 可以使用FromDocument检索Forum项目Document,如以下 C# 代码示例所示。

forum101 = context.FromDocument<Forum>(101);
注意

如果您的Document对象实现IEnumerable接口,您可以使用FromDocuments方法。这允许您遍历Document

FromQuery

运行Query操作,查询参数定义在QueryOperationConfig对象。

注意

要在后台执行此操作,请使用FromQueryAsync方法。

FromScan

运行Scan操作,扫描参数定义在ScanOperationConfig对象。

注意

要在后台执行此操作,请使用FromScanAsync方法。

获得

检索指定类型的目标表。如果您正在编写用于将任意数据映射到 DynamoDB 表的自定义转换器,并且需要确定哪个表与自定义数据类型相关联,则此选项非常有用。

Load

检索表中的项目。方法只需要要要检索的项目的主键。

默认情况下,DynamoDB 会返回具有最终一致性的值的项目。有关最终一致性模式的信息,请参阅有关读取一致性

注意

要在后台执行此操作,请使用LoadAsync方法。

Query

根据您提供的查询参数查询表。

只有当表具有复合主键(分区键和排序键)时,您才能对其执行查询。查询时,您必须指定分区键和适用于排序键的条件。

假设您有一个客户端Reply类映射到ReplyDynamoDB。以下 C# 代码示例查询Reply表,查找过去 15 天内发布的论坛话题回复。这些区域有:Reply表中有一个主键,该主键具有Id分区键和ReplyDateTime排序键。有关的更多信息Reply表中,请参阅为 DynamoDB 中的代码示例创建表和加载数据

DynamoDBContext context = new DynamoDBContext(client); string replyId = "DynamoDB#DynamoDB Thread 1"; //Partition key DateTime twoWeeksAgoDate = DateTime.UtcNow.Subtract(new TimeSpan(14, 0, 0, 0)); // Date to compare. IEnumerable<Reply> latestReplies = context.Query<Reply>(replyId, QueryOperator.GreaterThan, twoWeeksAgoDate);

这会一系列Reply对象。

这些区域有:Query方法返回 “延迟加载”IEnumerable收集。它最初只返回一页结果,然后在需要时发出服务调用请求下一页结果。要获取所有匹配项,您只需对IEnumerable

如果表具有简单主键(分区键),则不能使用Query方法。相反,您可以使用Load方法并提供用于检索项目的分区键。

注意

要在后台执行此操作,请使用QueryAsync方法。

Save

将指定对象保存到表中。如果表中指定的主键不存在于输入对象中,方法会将新项目添加到表中 如果主键存在,方法就会更新现有项目。

如果您配置了乐观锁定,则仅当客户端和项目的服务器端版本匹配时,更新才会成功。有关更多信息,请参阅使用 DynamoDB 的版本号进行乐观锁定,使用Amazon SDK for .NET对象持久化模型

注意

要在后台执行此操作,请使用SaveAsync方法。

Scan

执行整个表扫描。

您可以通过指定扫描条件来筛选扫描结果。可以根据表中的任何属性对条件进行评估。假设您有一个客户端类Book映射到ProductCatalogDynamoDB。以下 C# 示例扫描表并仅返回价格小于 0 的书籍项目。

IEnumerable<Book> itemsWithWrongPrice = context.Scan<Book>( new ScanCondition("Price", ScanOperator.LessThan, price), new ScanCondition("ProductCategory", ScanOperator.Equal, "Book") );

这些区域有:Scan方法返回 “延迟加载”IEnumerable收集。它最初只返回一页结果,然后在需要时发出服务调用请求下一页结果。要获取所有匹配项,您只需对IEnumerable

出于性能考虑,您应查询表并避免执行表扫描。

注意

要在后台执行此操作,请使用ScanAsync方法。

ToDocument

返回Document文档模型类。

如果要将文档模型类与对象持久化模型一起使用来执行任何数据操作,这将非常有用。有关文档模型类的更多信息,请参阅文档的更多信息。Amazon SDK for .NET,请参阅.NET: 文档模型

假设您有一个映射到示例的客户端类Forum表。然后,您可以使用DynamoDBContext获取项目作为Document对象来自Forum表,如以下 C# 代码示例所示。

DynamoDBContext context = new DynamoDBContext(client); Forum forum101 = context.Load<Forum>(101); // Retrieve a forum by primary key. Document doc = context.ToDocument<Forum>(forum101);

指定 DynamoDBContext 的可选参数

使用对象持久化模型时,您可以为DynamoDBContext

  • ConsistentRead当使用LoadQuery,或者Scan操作时,您可以添加此可选参数以请求数据的最新值。

  • IgnoreNullValues此参数通知DynamoDBContext来忽略属性上的空值Saveoperation. 如果此参数为 false(或未设置),则空值将被解释为删除特定属性的指令。

  • SkipVersionCheck此参数通知DynamoDBContext保存或删除项目时不比较版本。有关版本控制的更多信息,请参阅使用 DynamoDB 的版本号进行乐观锁定,使用Amazon SDK for .NET对象持久化模型

  • TableNamePrefix在所有表名称前加上特定字符串。如果此参数为 null(或未设置),则不使用前缀。

下面的 C# 示例将创建一个新的DynamoDBContext通过指定前面的两个可选参数。

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); ... DynamoDBContext context = new DynamoDBContext(client, new DynamoDBContextConfig { ConsistentRead = true, SkipVersionCheck = true});

DynamoDBContext包含这些可选参数以及您使用此上下文发送的每个请求。

而不是将这些参数设置在DynamoDBContext级别,您可以为使用DynamoDBContext,如以下 C# 代码示例所示。此示例加载特定的图书项目。这些区域有:Load方法DynamoDBContext指定前面的可选参数。

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); ... DynamoDBContext context = new DynamoDBContext(client); Book bookItem = context.Load<Book>(productId,new DynamoDBContextConfig{ ConsistentRead = true, SkipVersionCheck = true });

在本例中为,DynamoDBContext包含这些参数,仅在发送Get请求.