Example: CRUD operations using the AWS SDK for .NET document model
The following C# code example performs the following actions:
-
Creates a book item in the
ProductCatalog
table. -
Retrieves the book item.
-
Updates the book item. The code example shows a normal update that adds new attributes and updates existing attributes. It also shows a conditional update that updates the book price only if the existing price value is as specified in the code.
-
Deletes the book item.
For step-by-step instructions to test the following example, see .NET code examples.
Example
/** * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This file is licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ using System; using System.Collections.Generic; using System.Linq; using Amazon.DynamoDBv2; using Amazon.DynamoDBv2.DocumentModel; using Amazon.Runtime; namespace com.amazonaws.codesamples { class MidlevelItemCRUD { private static AmazonDynamoDBClient client = new AmazonDynamoDBClient(); private static string tableName = "ProductCatalog"; // The sample uses the following id PK value to add book item. private static int sampleBookId = 555; static void Main(string[] args) { try { Table productCatalog = Table.LoadTable(client, tableName); CreateBookItem(productCatalog); RetrieveBook(productCatalog); // Couple of sample updates. UpdateMultipleAttributes(productCatalog); UpdateBookPriceConditionally(productCatalog); // Delete. DeleteBook(productCatalog); Console.WriteLine("To continue, press Enter"); Console.ReadLine(); } catch (AmazonDynamoDBException e) { Console.WriteLine(e.Message); } catch (AmazonServiceException e) { Console.WriteLine(e.Message); } catch (Exception e) { Console.WriteLine(e.Message); } } // Creates a sample book item. private static void CreateBookItem(Table productCatalog) { Console.WriteLine("\n*** Executing CreateBookItem() ***"); var book = new Document(); book["Id"] = sampleBookId; book["Title"] = "Book " + sampleBookId; book["Price"] = 19.99; book["ISBN"] = "111-1111111111"; book["Authors"] = new List<string> { "Author 1", "Author 2", "Author 3" }; book["PageCount"] = 500; book["Dimensions"] = "8.5x11x.5"; book["InPublication"] = new DynamoDBBool(true); book["InStock"] = new DynamoDBBool(false); book["QuantityOnHand"] = 0; productCatalog.PutItem(book); } private static void RetrieveBook(Table productCatalog) { Console.WriteLine("\n*** Executing RetrieveBook() ***"); // Optional configuration. GetItemOperationConfig config = new GetItemOperationConfig { AttributesToGet = new List<string> { "Id", "ISBN", "Title", "Authors", "Price" }, ConsistentRead = true }; Document document = productCatalog.GetItem(sampleBookId, config); Console.WriteLine("RetrieveBook: Printing book retrieved..."); PrintDocument(document); } private static void UpdateMultipleAttributes(Table productCatalog) { Console.WriteLine("\n*** Executing UpdateMultipleAttributes() ***"); Console.WriteLine("\nUpdating multiple attributes...."); int partitionKey = sampleBookId; var book = new Document(); book["Id"] = partitionKey; // List of attribute updates. // The following replaces the existing authors list. book["Authors"] = new List<string> { "Author x", "Author y" }; book["newAttribute"] = "New Value"; book["ISBN"] = null; // Remove it. // Optional parameters. UpdateItemOperationConfig config = new UpdateItemOperationConfig { // Get updated item in response. ReturnValues = ReturnValues.AllNewAttributes }; Document updatedBook = productCatalog.UpdateItem(book, config); Console.WriteLine("UpdateMultipleAttributes: Printing item after updates ..."); PrintDocument(updatedBook); } private static void UpdateBookPriceConditionally(Table productCatalog) { Console.WriteLine("\n*** Executing UpdateBookPriceConditionally() ***"); int partitionKey = sampleBookId; var book = new Document(); book["Id"] = partitionKey; book["Price"] = 29.99; // For conditional price update, creating a condition expression. Expression expr = new Expression(); expr.ExpressionStatement = "Price = :val"; expr.ExpressionAttributeValues[":val"] = 19.00; // Optional parameters. UpdateItemOperationConfig config = new UpdateItemOperationConfig { ConditionalExpression = expr, ReturnValues = ReturnValues.AllNewAttributes }; Document updatedBook = productCatalog.UpdateItem(book, config); Console.WriteLine("UpdateBookPriceConditionally: Printing item whose price was conditionally updated"); PrintDocument(updatedBook); } private static void DeleteBook(Table productCatalog) { Console.WriteLine("\n*** Executing DeleteBook() ***"); // Optional configuration. DeleteItemOperationConfig config = new DeleteItemOperationConfig { // Return the deleted item. ReturnValues = ReturnValues.AllOldAttributes }; Document document = productCatalog.DeleteItem(sampleBookId, config); Console.WriteLine("DeleteBook: Printing deleted just deleted..."); PrintDocument(document); } private static void PrintDocument(Document updatedDocument) { foreach (var attribute in updatedDocument.GetAttributeNames()) { string stringValue = null; var value = updatedDocument[attribute]; if (value is Primitive) stringValue = value.AsPrimitive().Value.ToString(); else if (value is PrimitiveList) stringValue = string.Join(",", (from primitive in value.AsPrimitiveList().Entries select primitive.Value).ToArray()); Console.WriteLine("{0} - {1}", attribute, stringValue); } } } }