protected DictionaryDdbConverterBase(DdbConverter <TKey> keyConverter, DdbConverter <TValue> valueConverter) { KeyConverter = keyConverter; ValueConverter = valueConverter; KeyDictionaryConverter = keyConverter as IDictionaryKeyConverter <TKey> ?? throw new DdbException($"{KeyConverter.GetType().Name} must implement IDictionaryKeyConverter in order to store value as a dictionary key."); }
protected DictionaryDdbConverterBase(DynamoDbContextMetadata metadata) { KeyConverter = metadata.GetOrAddConverter <TKey>(); ValueConverter = metadata.GetOrAddConverter <TValue>(); KeyDictionaryConverter = KeyConverter as IDictionaryKeyConverter <TKey> ?? throw new DdbException($"{KeyConverter.GetType().Name} must implement IDictionaryKeyConverter in order to store value as a dictionary key."); }
public DdbPropertyInfo(PropertyInfo propertyInfo, string attributeName, DynamoDbAttributeType attributeType, DdbConverter <T> converter, DynamoDbContextMetadata metadata) : base(propertyInfo, attributeName, attributeType) { Converter = converter; Get = EmitMemberAccessor.CreatePropertyGetter <T>(propertyInfo); Set = propertyInfo.SetMethod != null?EmitMemberAccessor.CreatePropertySetter <T>(propertyInfo) : null; RuntimeClassInfo = metadata.GetOrAddClassInfo(propertyInfo.PropertyType, converter); }
public IReadOnlyCollectionDdbConverter(DdbConverter <T> elementConverter) : base(elementConverter) { }
protected DictionaryDdbConverter(DdbConverter <TKey> keyConverter, DdbConverter <TValue> valueConverter) : base(keyConverter, valueConverter) { }
public DdbClassInfo(Type type, DynamoDbContextMetadata metadata, DdbConverter converter) { Type = type; var properties = new Dictionary <string, DdbPropertyInfo>(); var jsonProperties = new JsonReaderDictionary <DdbPropertyInfo>(); ConverterBase = converter; ConverterType = converter.GetType(); ClassType = ConverterBase.ClassType; switch (ClassType) { case DdbClassType.Object: { for (var currentType = type; currentType != null; currentType = currentType.BaseType) { const BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly; foreach (PropertyInfo propertyInfo in currentType.GetProperties(bindingFlags)) { var attribute = propertyInfo.GetCustomAttribute <DynamoDbPropertyAttribute>(); if (attribute == null) { continue; } if (properties.ContainsKey(attribute.Name)) { continue; } var propertyConverter = metadata.GetOrAddConverter(propertyInfo.PropertyType, attribute.DdbConverterType); var ddbPropertyInfo = propertyConverter.CreateDdbPropertyInfo(propertyInfo, attribute.Name, attribute.AttributeType, metadata); properties.Add(attribute.Name, ddbPropertyInfo); jsonProperties.Add(attribute.Name, ddbPropertyInfo); switch (attribute.AttributeType) { case DynamoDbAttributeType.PartitionKey: if (PartitionKey != null) { throw new DdbException($"An entity {Type.FullName} contains multiple partition key attributes"); } PartitionKey = ddbPropertyInfo; break; case DynamoDbAttributeType.SortKey: if (SortKey != null) { throw new DdbException($"An entity {Type.FullName} contains multiple sort key attributes"); } SortKey = ddbPropertyInfo; break; } if (Version == null && propertyInfo.GetCustomAttribute <DynamoDbVersionAttribute>() != null) { Version = ddbPropertyInfo; } } TableName ??= currentType.GetCustomAttribute <DynamoDbTableAttribute>()?.TableName; } Constructor = EmitMemberAccessor.CreateConstructor(type) ?? throw new InvalidOperationException($"Can't generate constructor delegate for type '{type}'."); break; } case DdbClassType.Enumerable: case DdbClassType.Dictionary: { ElementType = ConverterBase.ElementType; ElementClassInfo = metadata.GetOrAddClassInfo(ElementType !); break; } } AttributesMap = properties; PropertiesMap = properties.Values.ToDictionary(x => x.PropertyInfo.Name); JsonProperties = jsonProperties; Properties = properties.Values.ToArray(); }
protected JsonCollectionDdbConverter(DdbConverter <TElement> elementConverter) { ElementConverter = elementConverter; }
public IListDdbConverter(DdbConverter <T> elementConverter) : base(elementConverter) { }
protected SetDdbConverter(DynamoDbContextMetadata metadata) { ElementConverter = metadata.GetOrAddConverter <TElement>(); ElementSetValueConverter = ElementConverter as ISetValueConverter <TElement> ?? throw new DdbException($"{ElementConverter.GetType().Name} must implement ISetValueConverter in order to store value as a part of dynamodb set."); }
public NullableValueTypeDdbConverter(DdbConverter <T> converter) : base(true) { _converter = converter; }
public JsonIReadOnlyListDdbConverter(DdbConverter <TValue> elementConverter) : base(elementConverter) { }
public JsonIReadOnlyDictionaryDdbConverter(DynamoDbContextMetadata metadata) { _keyConverter = metadata.GetOrAddConverter <TKey>(); ValueConverter = metadata.GetOrAddConverter <TValue>(); }
public JsonListHintDdbConverter(DdbConverter <T> elementConverter) { _elementConverter = elementConverter; }
public JsonIReadOnlyListHintDdbConverter(DdbConverter <T> elementConverter) { _elementConverter = elementConverter; }
public IReadOnlyListDdbConverter(DdbConverter <T> elementConverter) : base(elementConverter) { }
public ArrayDdbConverter(DdbConverter <T> elementConverter) : base(elementConverter) { }