Exemple #1
0
 /// <summary>
 ///     Creates a new <see cref="CoreTypeMappingParameters" /> parameter object with the given
 ///     converter composed with any existing converter and set on the new parameter object.
 /// </summary>
 /// <param name="converter"> The converter. </param>
 /// <returns> The new parameter object. </returns>
 public CoreTypeMappingParameters WithComposedConverter([CanBeNull] ValueConverter converter)
 => new CoreTypeMappingParameters(
     ClrType,
     converter == null ? Converter : converter.ComposeWith(Converter),
     Comparer,
     KeyComparer,
     ValueGeneratorFactory);
Exemple #2
0
        public void Can_convert_compose_to_strings()
        {
            var converter
                = ((ValueConverter <Beatles, string>)_enumToNumber.ComposeWith(_intToString))
                  .ConvertToProviderExpression.Compile();

            Assert.Equal("7", converter(Beatles.John));
            Assert.Equal("4", converter(Beatles.Paul));
            Assert.Equal("1", converter(Beatles.George));
            Assert.Equal("-1", converter(Beatles.Ringo));
            Assert.Equal("77", converter((Beatles)77));
            Assert.Equal("0", converter(default));
        /// <summary>
        ///     Creates a new instance of <see cref="TypeMappingInfo" /> with the given <see cref="ValueConverterInfo" />.
        /// </summary>
        /// <param name="source"> The source info. </param>
        /// <param name="builtInConverter"> The converter to apply. </param>
        protected TypeMappingInfo(
            [NotNull] TypeMappingInfo source,
            ValueConverterInfo builtInConverter)
        {
            Check.NotNull(source, nameof(source));

            Property     = source.Property;
            ModelClrType = source.ModelClrType;
            ConfiguredProviderClrType = source.ConfiguredProviderClrType;
            IsRowVersion = source.IsRowVersion;
            IsKeyOrIndex = source.IsKeyOrIndex;

            if (source._customConverter != null)
            {
                _customConverter = source._customConverter;

                ValueConverterInfo = new ValueConverterInfo(
                    _customConverter.ModelClrType,
                    builtInConverter.ProviderClrType,
                    i => _customConverter.ComposeWith(builtInConverter.Create()),
                    builtInConverter.MappingHints == null
                        ? _customConverter.MappingHints
                        : builtInConverter.MappingHints.With(_customConverter.MappingHints));
            }
            else
            {
                ValueConverterInfo = builtInConverter;
            }

            // ReSharper disable once VirtualMemberCallInConstructor
            var mappingHints = ValueConverterInfo?.MappingHints;

            Size            = source.Size ?? mappingHints?.Size;
            IsUnicode       = source.IsUnicode ?? mappingHints?.IsUnicode;
            Scale           = source.Scale ?? mappingHints?.Scale;
            Precision       = source.Precision ?? mappingHints?.Precision;
            ProviderClrType = CreateProviderClrType();
        }
Exemple #4
0
            /// <summary>
            ///     Creates a new instance of <see cref="TypeMappingInfo" /> with the given <see cref="ValueConverterInfo" />.
            /// </summary>
            /// <param name="source"> The source info. </param>
            /// <param name="builtInConverter"> The converter to apply. </param>
            protected TypeMappingInfo(
                [NotNull] TypeMappingInfo source,
                ValueConverterInfo builtInConverter)
            {
                Check.NotNull(source, nameof(source));

                Property     = source.Property;
                ModelClrType = source.ModelClrType;
                StoreClrType = source.StoreClrType;
                IsRowVersion = source.IsRowVersion;
                IsKeyOrIndex = source.IsKeyOrIndex;

                if (source._customConverter != null)
                {
                    _customConverter = source._customConverter;

                    ValueConverterInfo = new ValueConverterInfo(
                        _customConverter.ModelType,
                        builtInConverter.StoreClrType,
                        i => _customConverter.ComposeWith(builtInConverter.Create()),
                        _customConverter.MappingHints.With(builtInConverter.MappingHints));
                }
                else
                {
                    ValueConverterInfo = builtInConverter;
                }

                // ReSharper disable once VirtualMemberCallInConstructor
                var mappingHints = ValueConverterInfo?.MappingHints ?? default;

                Size          = CalculateSize(mappingHints, source.Size ?? mappingHints.Size);
                IsUnicode     = source.IsUnicode ?? mappingHints.IsUnicode;
                IsFixedLength = source.IsFixedLength ?? mappingHints.IsFixedLength;
                Scale         = source.Scale ?? mappingHints.Scale;
                Precision     = source.Precision ?? mappingHints.Precision;
            }
Exemple #5
0
 /// <summary>
 /// Composes the given <see cref="ValueConverter"/> with any already in this mapping
 /// and returns a new <see cref="ValueConverter"/> combining them together.
 /// </summary>
 /// <param name="converter"> The new converter. </param>
 /// <returns> The composed converter. </returns>
 protected virtual ValueConverter ComposeConverter([CanBeNull] ValueConverter converter)
 => converter == null ? Converter : converter.ComposeWith(Converter);