使用物件持久性模型 - AWS Mobile SDK

Xamarin 的AWS行動 SDK 現在已包含在AWS SDK for .NET. 本指南參考 Xamarin 行動 SDK 的封存版本。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用物件持久性模型

適用於 .NET 和 Xamarin 的 AWS 移動開發套件提供物件持久性模型,讓您能夠將用户端類別映射至 DynamoDB 資料表。然後每個物件執行個體會映射至相對應資料表中的某個項目。若要將用户端物件保存至資料表,物件持久性模型會提供 DynamoDBContext 類別,即 DynamoDB 的入口點。此類別可讓您連線至 DynamoDB,繼而存取資料表、執行各種 CRUD 操作以及執行查詢。

物件持久性模型不提供用於建立、更新或刪除資料表的 API。它只提供資料操作。若要建立、更新和刪除資料表,您必須使用低階 API。如需如何使用低階 API 的資訊,請參使用 DynamoDB 服務級別 API

概觀

物件持久性模型提供了一組屬性,可將用户端類別映射至資料表,並將屬性/欄位映射至資料表屬性。物件持久性模型支援類別屬性和資料表屬性之間的明確映射和預設映射。

  • 明確映射:若要將屬性映射至主索引鍵,您必須使用 DynamoDBHashKey和 DynamoDBRangeKey對象持久性模型屬性。此外,對於非主索引鍵屬性,如果類別中的屬性名稱和要對應的資料表屬性不相同,則必須明確新增 DynamoDBProperty ties 屬性來定義映射。

  • 預設對應-預設情況下,物件持久性模型會將類別屬性映射至資料表中具有相同名稱的屬性。

您不必映射每個類別屬性。您可以新增 DynamoDBIgnore 屬性來識別這些屬性。保存和檢索對象的實例將忽略任何標記為此屬性的屬性。

支援的資料類型

物件持久性模型會支援一組基本的 .NET 資料類型、集合和任意資料類型。模型目前支援下列基本資料類型。

  • bool

  • 位元組

  • char

  • DateTime

  • 十進制, 雙精度, 浮點

  • 國際 32, 國際 64 國際

  • 字節

  • 字串

  • UINT32, 聯合 64

對象持久化模型還支持具有以下限制的 .NET 集合類型:

  • 集合類型必須實現 ICCollection 接口。

  • 集合類型必須由受支持的基本體類型組成。例如,ICOLD 分析<string>,圖形切除<bool>。

  • 集合類型必須提供一個無參數的構造函數。

如需物件持久性模型的詳細資訊,請參.NET 物件持久性模型

建立 DynamoDB 用户端

建立 DynamoDB 用户端:

var client = new AmazonDynamoDBClient(credentials,region); DynamoDBContext context = new DynamoDBContext(client);

CRUD 操作

保存對象

建立物件:

[DynamoDBTable("Books")] public class Book { [DynamoDBHashKey] // Hash key. public string Id { get; set; } [DynamoDBGlobalSecondaryIndexHashKey] public string Author { get; set; } [DynamoDBGlobalSecondaryIndexRangeKey] public string Title { get; set; } public string ISBN { get; set; } public int Price { get; set; } public string PageCount { get; set; } } Book myBook = new Book { Id = id, Author = "Charles Dickens", Title = "Oliver Twist", ISBN = "111-1111111001", Price = 10, PageCount = 300 };

將物件保存至 DynamoDB 資料表:

context.Save(myBook);

索取物件

若要檢索物件:

Book retrievedBook = context.Load<Book>(1);

更新物件

要更新對象:

Book retrievedBook = context.Load<Book>(1); retrievedBook.ISBN = "111-1111111001"; context.Save(retrievedBook);

刪除物件

若要刪除物件:

Book retrievedBook = context.Load<Book>(1); context.Delete(retrievedBook);

查詢和掃描

查詢和檢索作者是「查爾斯·狄更斯」的所有圖書,請執行以下操作:

public async Task QueryAsync(AWSCredentials credentials, RegionEndpoint region) { var client = new AmazonDynamoDBClient(credentials, region); DynamoDBContext context = new DynamoDBContext(client); var search = context.FromQueryAsync < Book > (new Amazon.DynamoDBv2.DocumentModel.QueryOperationConfig() { IndexName = "Author-Title-index", Filter = new Amazon.DynamoDBv2.DocumentModel.QueryFilter("Author", Amazon.DynamoDBv2.DocumentModel.QueryOperator.Equal, "Charles Dickens") }); Console.WriteLine("items retrieved"); var searchResponse = await search.GetRemainingAsync(); searchResponse.ForEach((s) = > { Console.WriteLine(s.ToString()); }); }

下面的掃描示例代碼返回我們表格中的所有圖書:

public async Task ScanAsync(AWSCredentials credentials, RegionEndpoint region) { var client = new AmazonDynamoDBClient(credentials, region); DynamoDBContext context = new DynamoDBContext(client); var search = context.FromScanAsync < Book > (new Amazon.DynamoDBv2.DocumentModel.ScanOperationConfig() { ConsistentRead = true }); Console.WriteLine("items retrieved"); var searchResponse = await search.GetRemainingAsync(); searchResponse.ForEach((s) = > { Console.WriteLine(s.ToString()); }); }