CAST supports DynamoDB via its com.castsoftware.nosqldotnet extension. Details about how this support is provided for .NET source code is discussed below.
Supported Client Libraries
Library | Supported |
---|---|
AWS DynamoDB .NET SDK |
Supported Operations
Operation | Methods Supported |
---|---|
Insert | Amazon.DynamoDBv2.DocumentModel.Table.PutItem Amazon.DynamoDBv2.DocumentModel.Table.PutItemAsync Amazon.DynamoDBv2.DocumentModel.Table.TryPutItem Amazon.DynamoDBv2.DataModel.DynamoDBContext.Save Amazon.DynamoDBv2.DataModel.DynamoDBContext.SaveAsync |
Update | Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateItem Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateItemAsync Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateTable Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateTableAsync Amazon.DynamoDBv2.IAmazonDynamoDB.UpdateItem Amazon.DynamoDBv2.IAmazonDynamoDB.UpdateItemAsync Amazon.DynamoDBv2.IAmazonDynamoDB.UpdateTable Amazon.DynamoDBv2.IAmazonDynamoDB.UpdateTableAsync Amazon.DynamoDBv2.DocumentModel.Table.UpdateItem Amazon.DynamoDBv2.DocumentModel.Table.UpdateItemAsync Amazon.DynamoDBv2.DocumentModel.Table.TryUpdateItem |
Select | Amazon.DynamoDBv2.AmazonDynamoDBClient.Scan Amazon.DynamoDBv2.AmazonDynamoDBClient.ScanAsync Amazon.DynamoDBv2.AmazonDynamoDBClient.BatchGetItem Amazon.DynamoDBv2.AmazonDynamoDBClient.BatchGetItemAsync Amazon.DynamoDBv2.AmazonDynamoDBClient.BatchWriteItem Amazon.DynamoDBv2.AmazonDynamoDBClient.BatchWriteItemAsync Amazon.DynamoDBv2.AmazonDynamoDBClient.GetItem Amazon.DynamoDBv2.AmazonDynamoDBClient.GetItemAsync Amazon.DynamoDBv2.IAmazonDynamoDB.DescribeTable Amazon.DynamoDBv2.IAmazonDynamoDB.DescribeTableAsync Amazon.DynamoDBv2.IAmazonDynamoDB.BatchGetItem Amazon.DynamoDBv2.IAmazonDynamoDB.BatchGetItemAsync Amazon.DynamoDBv2.IAmazonDynamoDB.Query Amazon.DynamoDBv2.IAmazonDynamoDB.QueryAsync Amazon.DynamoDBv2.DataModel.DynamoDBContext.QueryAsync Amazon.DynamoDBv2.DataModel.DynamoDBContext.LoadAsync Amazon.DynamoDBv2.DataModel.DynamoDBContext.Load Amazon.DynamoDBv2.DataModel.DynamoDBContext.Scan Amazon.DynamoDBv2.DataModel.DynamoDBContext.ScanAsync Amazon.DynamoDBv2.DataModel.DynamoDBContext.FromDocuments Amazon.DynamoDBv2.DataModel.DynamoDBContext.FromQuery Amazon.DynamoDBv2.DocumentModel.Table.DescribeTable Amazon.DynamoDBv2.DocumentModel.Table.GetItem Amazon.DynamoDBv2.DocumentModel.Table.GetItemAsync Amazon.DynamoDBv2.DocumentModel.Table.Query Amazon.DynamoDBv2.DocumentModel.Table.Scan Amazon.DynamoDBv2.DocumentModel.Table.TryLoadTable |
Delete | Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteItem Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteItemAsync Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteTable Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteTableAsync Amazon.DynamoDBv2.IAmazonDynamoDB.DeleteItem Amazon.DynamoDBv2.IAmazonDynamoDB.DeleteItemAsync Amazon.DynamoDBv2.IAmazonDynamoDB.DeleteTable Amazon.DynamoDBv2.IAmazonDynamoDB.DeleteTableAsync Amazon.DynamoDBv2.DataModel.DynamoDBContext.Delete Amazon.DynamoDBv2.DataModel.DynamoDBContext.DeleteAsync Amazon.DynamoDBv2.DocumentModel.Table.DeleteItem Amazon.DynamoDBv2.DocumentModel.Table.DeleteItemAsync Amazon.DynamoDBv2.DocumentModel.Table.TryDeleteItem |
Objects
Icon | Description |
---|---|
DotNet AWS DynamoDB Client | |
DotNet AWS DynamoDB Table | |
DotNet AWS Unknown DynamoDB Client | |
| DotNet AWS Unknown DynamoDB Table |
Links
Link type | Source and destination of link | Methods Supported |
---|---|---|
belongsTo | From DotNet AWS DynamoDB Table to DotNet AWS DynamoDB Client object | - |
useInsertink | Between the caller .NET Method (C#) object and DotNet AWS DynamoDB Table |
|
useUpdateLink | Between the caller .NET Method (C#) object and DotNet AWS DynamoDB Table |
|
useSelectLink | Between the caller .NET Method (C#) object and DotNet AWS DynamoDB Table |
|
useDeleteLink | Between the caller .NET Method (C#) object and DotNet AWS DynamoDB Table |
|
What results can you expect?
Some example scenarios are shown below:
AmazonDynamoDB Client and Table Creation
class MidlevelItemCRUD { AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig(); // Set the endpoint URL clientConfig.ServiceURL = "http://localhost:8000"; AmazonDynamoDBClient client = new AmazonDynamoDBClient(clientConfig); 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); } }
Insert Operation
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); }
Select Operation
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); }
Update Operation
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); }
Delete Operation
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); }
Known Limitations
- Client objects are always default with the name 'client'
- If the client and table are not resolved will create Unknown Objects.