Esempio n. 1
0
        public KeyValuePair <string, EntityProperty>[] ConvertValue <EntityType>(MemberInfo memberInfo,
                                                                                 object value, IWrapTableEntity <EntityType> tableEntityWrapper)
        {
            var accountLinks = (AccountLinks)value;

            return(accountLinks.accountLinks
                   .NullToEmpty()
                   .Select(
                       accountLink =>
            {
                var key = $"AM{accountLink.method.id.ToString("n")}";
                var value = EntityProperty.GeneratePropertyForString(accountLink.externalAccountKey);
                return key.PairWithValue(value);
            })
                   .ToArray());
        }
        public override KeyValuePair <string, EntityProperty>[] ConvertValue <EntityType>(MemberInfo memberInfo,
                                                                                          object value, IWrapTableEntity <EntityType> tableEntityWrapper)
        {
            var propertyName = this.GetTablePropertyName(memberInfo);

            var ep = GetEp();

            return(new KeyValuePair <string, EntityProperty>[]
            {
                propertyName.PairWithValue(ep)
            });

            EntityProperty GetEp()
            {
                if (value == null)
                {
                    return(new EntityProperty(default(long?)));
                }

                if (value is long)
                {
                    return(new EntityProperty((long)value));
                }
                if (value is int)
                {
                    return(new EntityProperty((long)((int)value)));
                }
                if (value is DateTime)
                {
                    return(new EntityProperty(((DateTime)value).Ticks));
                }
                if (value is DateTime?)
                {
                    var dtMaybe = value as DateTime?;
                    if (dtMaybe.HasValue)
                    {
                        return(new EntityProperty(dtMaybe.Value.Ticks));
                    }
                    return(new EntityProperty(default(long?)));
                }
                throw new ArgumentException(
                          $"{typeof(StorageDateTimeTicksAttribute).FullName} cannot convert {value.GetType().FullName} to an EntityProperty");
            }
        }
 public KeyValuePair <string, EntityProperty>[] ConvertValue <EntityType>(MemberInfo memberInfo,
                                                                          object value, IWrapTableEntity <EntityType> tableEntityWrapper)
 {
     return(new KeyValuePair <string, EntityProperty>[] { });
 }
        public virtual KeyValuePair <string, EntityProperty>[] ConvertValue <EntityType>(MemberInfo memberInfo,
                                                                                         object value, IWrapTableEntity <EntityType> tableEntityWrapper)
        {
            var key          = GetTablePropertyName(memberInfo);
            var rowKey       = tableEntityWrapper.RowKey;
            var partitionKey = tableEntityWrapper.PartitionKey;

            return(new KeyValuePair <string, EntityProperty>[]
            {
                $"{key}__RK".PairWithValue(new EntityProperty(rowKey)),
                $"{key}__PK".PairWithValue(new EntityProperty(partitionKey)),
            });
        }
        public override KeyValuePair <string, EntityProperty>[] ConvertValue <EntityType>(MemberInfo memberInfo,
                                                                                          object value, IWrapTableEntity <EntityType> tableEntityWrapper)
        {
            var propertyName = this.GetTablePropertyName(memberInfo);

            var valueType = memberInfo.GetPropertyOrFieldType();

            return(CastValue(valueType, value, propertyName));
        }
        public override KeyValuePair <string, EntityProperty>[] ConvertValue <EntityType>(MemberInfo memberInfo,
                                                                                          object value, IWrapTableEntity <EntityType> tableEntityWrapper)
        {
            var propertyName = this.GetTablePropertyName(memberInfo);
            var valueType    = memberInfo.GetPropertyOrFieldType();

            return(CastValue(valueType, value, propertyName)
                   .SelectMany(
                       propNameStorageValueKvp =>
            {
                var propName = propNameStorageValueKvp.Key;
                var storageValue = propNameStorageValueKvp.Value;
                if (storageValue.PropertyType == EdmType.Binary)
                {
                    if (storageValue.BinaryValue.Length <= 0x10000)
                    {
                        return propNameStorageValueKvp.AsArray();
                    }

                    var overflowTokenBytes = new Guid(overflowToken).ToByteArray();
                    return storageValue.BinaryValue
                    .Split(x => 0x10000)
                    .Select(
                        (bytes, index) =>
                    {
                        var bytesArr = bytes.ToArray();
                        var storageValueSized = new EntityProperty(bytesArr);
                        var propNameIndexed = $"{propName}_overflow_{index}";
                        return propNameIndexed.PairWithValue(storageValueSized);
                    })
                    .Append(propName.PairWithValue(new EntityProperty(overflowTokenBytes)));
                }
                if (storageValue.PropertyType == EdmType.String)
                {
                    if (storageValue.StringValue.Length <= 0x8000)
                    {
                        return propNameStorageValueKvp.AsArray();
                    }

                    return storageValue.StringValue
                    .Split(x => 0x8000)
                    .Select(
                        (chars, index) =>
                    {
                        var stringValue = new String(chars.ToArray());
                        var storageValueSized = new EntityProperty(stringValue);
                        var propNameIndexed = $"{propName}_overflow_{index}";
                        return propNameIndexed.PairWithValue(storageValueSized);
                    })
                    .Append(propName.PairWithValue(new EntityProperty(overflowTokenString)));
                }

                return propNameStorageValueKvp.AsArray();
            })
                   .ToArray());
        }