本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
DynamoDBContext 类
类是 DynamoDBContext
数据库的入口点。Amazon DynamoDB它提供了与 DynamoDB 的连接,使您能够访问各个表中的数据、执行各种 CRUD 操作以及运行查询。类提供以下方法。DynamoDBContext
CreateMultiTableBatchGet
创建一个由多个单独的 MultiTableBatchGet
对象组成的 BatchGet
对象。其中每个 BatchGet
对象均可用于从单个 DynamoDB 表中检索项目。
要从表中检索项目,请使用 ExecuteBatchGet
方法,并将 MultiTableBatchGet
对象作为参数传递。
CreateMultiTableBatchWrite
创建一个由多个单独的 MultiTableBatchWrite
对象组成的 BatchWrite
对象。其中每个 BatchWrite
对象均可用于在单个 DynamoDB 表中写入或删除项目。
要写入表,请使用 ExecuteBatchWrite
方法,并将 MultiTableBatchWrite
对象作为参数传递。
CreateBatchGet
创建一个 BatchGet
对象,可用于从表中检索多个项目。有关更多信息,请参阅批量获取:获取多个项目 。
CreateBatchWrite
创建一个 BatchWrite
对象,可用于将多个项目放入表中或从表中删除多个项目。有关更多信息,请参阅批量写入:放置和删除多个项目 。
Delete
删除表中的项目。该方法需要您要删除的项目的主键。您可以提供主键值或包含主键值的客户端对象作为此方法的参数。
-
如果您指定客户端对象作为参数,并且已启用乐观锁,则只有当客户端与对象的服务器端版本匹配时,删除才会成功。
-
如果您仅将主键值指定为参数,则无论您是否启用了乐观锁,删除都会成功。
要在后台执行此操作,请改用 DeleteAsync
方法。
Dispose
分配所有托管和非托管资源。
ExecuteBatchGet
从一个或多个表中读取数据,处理 BatchGet
中的所有 MultiTableBatchGet
对象。
要在后台执行此操作,请改用 ExecuteBatchGetAsync
方法。
ExecuteBatchWrite
在一个或多个表中写入或删除数据,处理 BatchWrite
中的所有 MultiTableBatchWrite
对象。
要在后台执行此操作,请改用 ExecuteBatchWriteAsync
方法。
FromDocument
给定 Document
的实例,FromDocument
方法将返回客户端类的实例。
如果要使用文档模型类以及对象持久化模型执行任何数据操作,这是非常有用的。有关 适用于 .NET 的 AWS 开发工具包 提供的文档模型类的更多信息,请参阅.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
方法。
GetTargetTable
检索指定类型的目标表。如果您正在编写用于将任意数据映射到 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
表的客户端类。然后,您可以使用 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
—当使用 、Load
或Query
操作检索数据时,您可以添加此可选参数以请求数据的最新值。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
请求时包含这些参数。