AWS Mobile SDK for Xamarin은 이제 AWS SDK for .NET에 포함됩니다. 이 안내서에서는 Xamarin용 모바일 SDK의 아카이브된 버전을 참조합니다.
객체 지속성 모델 사용
.NET 및 Xamarin용 AWS Mobile SDK는 객체 지속성 모델을 제공하므로 이것으로 클라이언트 측 클래스를 DynamoDB 테이블에 매핑할 수 있습니다. 그러면 각 객체 인스턴스도 해당 테이블의 항목으로 매핑됩니다. 클라이언트 쪽 객체를 테이블에 저장하기 위해 객체 지속성 모델에서는 DynamoDB에 대한 진입점인 DynamoDBContext 클래스를 제공합니다. 이 클래스는 DynamoDB로 연결하는 역할을 하기 때문에 테이블에 액세스하여 다양한 CRUD 작업이 가능할 뿐만 아니라 쿼리를 실행할 수 있습니다.
객체 지속성 모델은 테이블을 생성, 업데이트 또는 삭제할 수 있는 API를 제공하지 않으며 데이터 작업만 제공합니다. 테이블을 생성, 업데이트 및 삭제하려면 하위 수준 API를 사용해야 합니다. 하위 수준 API를 사용하는 방법에 대한 자세한 내용은 DynamoDB 서비스 수준 API 사용을 참조하세요.
개요
객체 지속성 모델은 속성 세트를 제공하여 클라이언트 측 클래스를 테이블로 매핑할 수 있으며, 속성/필드를 테이블 속성으로 매핑할 수 있습니다. 객체 지속성 모델은 클래스 속성 및 테이블 속성 간 명시적 매핑과 기본 매핑 모두를 지원합니다.
-
명시적 매핑: 속성을 기본 키에 매핑하기 위해서는 DynamoDBHashKey 및 DynamoDBRangeKey 객체 지속성 모델 속성을 사용해야 합니다. 또한, 기본이 아닌 키 속성의 경우, 클래스의 속성 이름과 이를 매핑하려는 해당 테이블 속성이 같지 않다면 DynamoDBProperty 속성을 명시적으로 추가하여 매핑을 정의해야 합니다.
-
기본 매핑 - 기본적으로 객체 지속성 모델은 클래스 속성을 같은 이름의 테이블 속성으로 매핑합니다.
각 클래스 속성을 전부 하나씩 매핑할 필요는 없습니다. DynamoDBIgnore 속성을 추가하여 이러한 속성을 확인할 수 있습니다. 객체의 인스턴스를 저장 및 검색하면 이 속성으로 표시된 속성이 모두 생략됩니다.
지원되는 데이터 형식
객체 지속성 모델은 여러 개의 기본 .NET 데이터 유형, 컬렉션 및 임의 데이터 유형을 지원합니다. 모델이 지원하는 기본 데이터 유형은 다음과 같습니다.
-
bool
-
바이트
-
char
-
DateTime
-
decimal, double, float
-
Int16, Int32, Int64
-
SByte
-
문자열
-
UInt16, UInt32, UInt64
객체 지속성 모델은 .NET 컬렉션 형식도 지원하지만 다음과 같은 제한 사항이 있습니다.
-
컬렉션 형식은 ICollection 인터페이스를 구현해야 합니다.
-
컬렉션 형식은 지원되는 기본 유형으로 구성되어야 합니다. 예를 들면 ICollection<string>, ICollection<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);
Query and Scan
저자가 "Charles Dickens"인 모든 도서를 쿼리하고 가져오는 방법은 다음과 같습니다.
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()); }); }