结合使用 .NET 对象持久化模型和 DynamoDB
AWS SDK for .NET 提供的对象持久化模型让您能够将客户端类映射到 Amazon DynamoDB 表。然后,每个对象实例映射到对应表中的项目。为了在表中保存您的客户端对象,对象持久化模型提供了 DynamoDBContext
类,这是 DynamoDB 的入口点。这个类提供到 DynamoDB 的连接,让您能够访问表、执行各种 CRUD 操作,以及执行查询。
对象持久化模型提供一系列特性,用于将客户端类映射到表,以及将属性/字段映射到表特性。
注意
对象持久化模型不提供用于创建、更新或删除表的 API。它只提供数据操作。要创建、更新和删除表,您必须使用 AWS SDK for .NET 低级 API。
以下示例显示对象持久化模型的工作原理。从 ProductCatalog
表开始。使用 Id
作为其主键。
ProductCatalog(Id, ...)
假设您有一个 Book
类,Title
、ISBN
和 Authors
属性。您可以添加由对象持久化模型定义的属性,将 Book
类映射到 ProductCatalog
表。如以下 C# 代码示例所示。
例
[DynamoDBTable("ProductCatalog")] public class Book { [DynamoDBHashKey] public int Id { get; set; } public string Title { get; set; } public int ISBN { get; set; } [DynamoDBProperty("Authors")] public List<string> BookAuthors { get; set; } [DynamoDBIgnore] public string CoverPage { get; set; } }
在上述示例中,DynamoDBTable
属性将 Book
类映射到 ProductCatalog
表。
对象持久化模型支持类属性和表特性之间的明确映射和默认映射。
-
明确映射—要将属性映射到主键,您必须使用
DynamoDBHashKey
和DynamoDBRangeKey
对象持久化模型特性。此外,对于非主键特性,如果类中的属性名称与您希望将其映射到的对应表特性名称不同,那么您必须通过明确添加DynamoDBProperty
特性定义这一映射。在上述示例中,
Id
属性映射到具有相同名称的主键,BookAuthors
属性映射到ProductCatalog
表的Authors
属性。 -
默认映射—默认情况下,对象持久化模型会将类属性映射到表中同名的特性。
在上述示例中,属性
Title
和ISBN
映射到ProductCatalog
表中具有相同名称的属性。
您无需映射每一个类属性,而是可以通过添加 DynamoDBIgnore
属性来标识这些属性。将 Book
实例保存到表后,DynamoDBContext
实例不包含 CoverPage
属性。当您检索书籍实例时,也不会返回此属性。
您可以映射 .NET 基元类型(如 int 和 string)的属性。您还可以映射任意数据类型,只要提供适当的转换器以将任意数据映射到 DynamoDB 类型之一。要了解有关映射任意类型的信息,请参阅通过使用 AWS SDK for .NET 对象持久化模型的 DynamoDB 映射任意数据。
对象持久化模型支持乐观锁定。在更新操作期间,这可确保您拥有要更新的项目的最新副本。有关更多信息,请参阅 将 DynamoDB 和 AWS SDK for .NET 对象持久化模型结合使用的乐观锁。
有关更多信息,请参阅以下主题。
主题
支持的数据类型
对象持久化模型支持一系列 .NET 基元数据类型、集合数据类型和其他任意数据类型。该模型支持以下基元数据类型。
-
bool
-
byte
-
char
-
DateTime
-
decimal
-
double
-
float
-
Int16
-
Int32
-
Int64
-
SByte
-
string
-
UInt16
-
UInt32
-
UInt64
对象持久化模型还支持 .NET 集合类型。DynamoDBContext
能够转换具体集合类型和简单的普通旧 CLR 对象(POCO)。
下表汇总了上述 .NET 类型到 DynamoDB 类型的映射。
.NET 原始类型 | DynamoDB 类型 |
---|---|
所有数字类型 |
|
所有字符串类型 |
|
MemoryStream,byte [] |
|
布尔 | N (数字类型)。0 表示 false,1 表示 true。 |
集合类型 | BS (二进制集)类型、SS (字符串集)类型或 NS (数字集)类型。 |
DateTime | S (字符串类型)。DateTime 值存储为符合 ISO-8601 格式的字符串。 |
对象持久化模型还支持任意数据类型。但是,您必须提供转换器代码才能将复杂类型映射到 DynamoDB 类型。
注意
-
支持空二进制值。
-
支持读取空字符串值。写入 DynamoDB 时,字符串集类型的属性值中支持空字符串属性值。从写入请求中删除列表或映射类型中包含的字符串类型的空字符串属性值和空字符串值