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

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

DynamoDBContext 类

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

Create​MultiTable​BatchGet

创建一个由多个单独的 MultiTableBatchGet 对象组成的 BatchGet 对象。其中每个 BatchGet 对象均可用于从单个 DynamoDB 表中检索项目。

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

Create​MultiTable​BatchWrite

创建一个由多个单独的 MultiTableBatchWrite 对象组成的 BatchWrite 对象。其中每个 BatchWrite 对象均可用于在单个 DynamoDB 表中写入或删除项目。

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

Create​Batch​Get

创建一个 BatchGet 对象,可用于从表中检索多个项目。有关更多信息,请参阅批量获取:获取多个项目

Create​Batch​Write

创建一个 BatchWrite 对象,可用于将多个项目放入表中或从表中删除多个项目。有关更多信息,请参阅批量写入:放置和删除多个项目

Delete

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

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

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

注意

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

Dispose

分配所有托管和非托管资源。

Execute​Batch​Get

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

注意

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

Execute​Batch​Write

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

注意

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

FromDocument

给定 Document 的实例,FromDocument 方法将返回客户端类的实例。

如果要使用文档模型类以及对象持久化模型执行任何数据操作,这是非常有用的。有关 适用于 .NET 的 AWS 开发工具包 提供的文档模型类的更多信息,请参阅.NET:文档模型

假设您有一个名为 Documentdoc 对象,其中包含 Forum 项目的表示形式。(要了解如何构建此对象,请参阅本主题后面有关 ToDocument 方法的说明。) 您可以使用 FromDocumentForum 中检索 Document 项目,如以下 C# 代码示例所示。

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

如果您的 Document 对象实现 IEnumerable 接口,您可以改用 FromDocuments 方法。这样,您就可以循环访问 Document 中的所有类实例。

FromQuery

使用 Query 对象中定义的查询参数运行 QueryOperationConfig 操作。

注意

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

FromScan

使用 Scan 对象中定义的扫描参数运行 ScanOperationConfig 操作。

注意

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

Get​Target​Table

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

Load

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

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

注意

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

Query

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

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

假设您有一个客户端 Reply 类映射到 Reply 中的 DynamoDB 表。以下 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 使用 适用于 .NET 的 AWS 开发工具包 对象持久化模型对版本号乐观锁

注意

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

Scan

执行整个表扫描。

您可以通过指定扫描条件来筛选扫描结果。可以在表中的任何属性上计算条件。假设您有一个客户端类 Book 映射到 ProductCatalog 中的 DynamoDB 表。以下 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 文档模型类的实例。

如果要使用文档模型类以及对象持久化模型执行任何数据操作,这是非常有用的。有关适用于 .NET 的 AWS 开发工具包提供的文档模型类的更多信息,请参阅.NET:文档模型

假设您有一个映射到示例 Forum 表的客户端类。然后,您可以使用 DynamoDBContextDocument 表中获取项目作为 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 操作期间忽略属性上的 null 值。Save如果此参数为 false(或未设置),则 null 值将解释为用于删除特定属性的指令。

  • SkipVersionCheck 此参数通知 DynamoDBContext 在保存或删除项目时不比较版本。有关版本控制的更多信息,请参阅通过 DynamoDB 使用 适用于 .NET 的 AWS 开发工具包 对象持久化模型对版本号乐观锁

  • 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 请求时包含这些参数。