Пример #1
0
        public void DeleteItems <T>(IEnumerable <DynamoId> ids)
        {
            var table        = DynamoMetadata.GetTable <T>();
            var remainingIds = ids.ToList();

            while (remainingIds.Count > 0)
            {
                var batchSize = Math.Min(remainingIds.Count, MaxWriteBatchSize);
                var nextBatch = remainingIds.GetRange(0, batchSize);
                remainingIds.RemoveRange(0, batchSize);

                var deleteItems = nextBatch.Map(id => new WriteRequest(
                                                    new DeleteRequest(Converters.ToAttributeKeyValue(this, table, id))));

                ExecBatchWriteItemResponse <T>(table, deleteItems);
            }
        }
Пример #2
0
        public IEnumerable <T> GetRelatedItems <T>(object hash)
        {
            var table = DynamoMetadata.GetTable <T>();

            var argType = hash.GetType();
            var dbType  = Converters.GetFieldType(argType);
            var request = new QueryRequest(table.Name)
            {
                Limit = PagingLimit,
                KeyConditionExpression    = $"{table.HashKey.Name} = :k1",
                ExpressionAttributeValues = new Dictionary <string, AttributeValue> {
                    { ":k1", Converters.ToAttributeValue(this, argType, dbType, hash) }
                }
            };

            return(Query(request, r => r.ConvertAll <T>()));
        }
Пример #3
0
        public T DeleteByItem <T>(T item)
        {
            var    table     = DynamoMetadata.GetTable <T>();
            string hashKey   = table.HashKey.Name;
            object hashValue = typeof(T).GetProperty(hashKey).GetValue(item, null);

            if (table.RangeKey != null)
            {
                string rangeKey   = table.RangeKey.Name;
                object rangeValue = typeof(T).GetProperty(rangeKey).GetValue(item, null);
                return(DeleteItem <T>(hashValue, rangeValue));
            }
            else
            {
                return(DeleteItem <T>(hashValue));
            }
        }
Пример #4
0
        public Table GetTableSchema(Type type)
        {
            var table = DynamoMetadata.GetTable(type);

            return(Exec(() =>
            {
                try
                {
                    Table.TryLoadTable(DynamoDb, table.Name, out var awsTable);
                    return awsTable;
                }
                catch (ResourceNotFoundException)
                {
                    return null;
                }
            }, throwNotFoundExceptions));
        }
Пример #5
0
        public T GetItem <T>(object hash)
        {
            var table    = DynamoMetadata.GetTable <T>();
            var rangeKey = table.RangeKey;

            if (rangeKey != null)
            {
                return(GetItemFromQuery <T>(table.Name, table.HashKey.Name, hash));
            }
            var request = new GetItemRequest
            {
                TableName      = table.Name,
                Key            = Converters.ToAttributeKeyValue(this, table.HashKey, hash),
                ConsistentRead = ConsistentRead
            };

            return(ConvertGetItemResponse <T>(request, table));
        }
Пример #6
0
        public T DeleteItem <T>(object hash, object range, ReturnItem returnItem = ReturnItem.None)
        {
            var table   = DynamoMetadata.GetTable <T>();
            var request = new DeleteItemRequest
            {
                TableName    = table.Name,
                Key          = Converters.ToAttributeKeyValue(this, table, hash, range),
                ReturnValues = returnItem.ToReturnValue(),
            };

            var response = Exec(() => DynamoDb.DeleteItem(request));

            if (response.Attributes.IsEmpty())
            {
                return(default(T));
            }

            return(Converters.FromAttributeValues <T>(table, response.Attributes));
        }
Пример #7
0
        public T PutItem <T>(T value, bool returnOld = false)
        {
            var table   = DynamoMetadata.GetTable <T>();
            var request = new PutItemRequest
            {
                TableName    = table.Name,
                Item         = Converters.ToAttributeValues(this, value, table),
                ReturnValues = returnOld ? ReturnValue.ALL_OLD : ReturnValue.NONE,
            };

            var response = Exec(() => DynamoDb.PutItem(request));

            if (response.Attributes.IsEmpty())
            {
                return(default(T));
            }

            return(Converters.FromAttributeValues <T>(table, response.Attributes));
        }
Пример #8
0
 public UpdateExpression <T> UpdateExpression <T>(object hash, object range = null)
 {
     return(new UpdateExpression <T>(this, DynamoMetadata.GetTable <T>(), hash, range));
 }