Ejemplo n.º 1
0
        public TypeMapper(ServiceLocator locator)
        {
            DestType = typeof(TDest);

            SourceType          = typeof(TSource);
            propertyMappingInfo = new PropertyMappingInfo <TDest>();
            registrationInfo    = new PropertyRegistrationInfo <TDest>();
            locatorMappingInfo  = new LocatorRegistrationInfo <TDest>();
            this.locator        = locator;
            LocatorInjectOnlyFlaggedProperties = true;
        }
Ejemplo n.º 2
0
        public override IPropertyMappingInfo GetPropertyMappingInfo(PropertyInfo propertyInfo)
        {
            var info = new PropertyMappingInfo(propertyInfo, Instance);

            info.Type        = typeof(string);
            info.ValueSetter = value =>
            {
                typeStringBuilder.AppendFormat("{0}:{1}", info.Name, value);
                typeStringBuilder.AppendLine();
            };
            return(info);
        }
Ejemplo n.º 3
0
        public async Task ParseAsync_ReturnsCorrectResults()
        {
            // Arrange
            var dataWithoutHeader = new List <string[]>
            {
                new[] { "Mark", "23" },
                new[] { "Thomas", "27" },
            };

            var testEntityMeta = _provider.GetMetadata(1, typeof(TestEntity), null, null);
            var nameMeta       = testEntityMeta.Property(nameof(TestEntity.Name));
            var ageMeta        = testEntityMeta.Property(nameof(TestEntity.Age));

            var nameMapping = new PropertyMappingInfo(nameMeta, nameMeta)
            {
                Index = 0
            };
            var ageMapping = new PropertyMappingInfo(ageMeta, ageMeta)
            {
                Index = 1
            };

            var simpleProps = new List <PropertyMappingInfo> {
                nameMapping, ageMapping
            };
            var collectionProps = new List <MappingInfo> {
            };
            var mapping         = new MappingInfo(testEntityMeta, testEntityMeta, simpleProps, collectionProps, null, null);
            var errors          = new ImportErrors();

            // Act
            var entities = await _parser.ParseAsync <TestEntity>(dataWithoutHeader, mapping, errors);

            // Assert
            Assert.Collection(entities,
                              entity =>
            {
                Assert.Equal("Mark", entity.Name);
                Assert.Equal(23, entity.Age);
            },
                              entity =>
            {
                Assert.Equal("Thomas", entity.Name);
                Assert.Equal(27, entity.Age);
            }
                              );
        }
Ejemplo n.º 4
0
        private static List <PropertyMappingInfo> LoadPropertyMappingInfo(Type objType)
        {
            List <PropertyMappingInfo> mapInfoList = new List <PropertyMappingInfo>();

            foreach (PropertyInfo info in objType.GetProperties())
            {
                MappingAttribute mapAttr = (MappingAttribute)Attribute.GetCustomAttribute(info, typeof(MappingAttribute));
                if (mapAttr == null && (System.Type.GetTypeCode(info.PropertyType) != TypeCode.Object || info.PropertyType == new System.TimeSpan().GetType()))
                {
                    //mapAttr = new MappingAttribute(string.Concat(info.Name, ",un-insert,un-update"));
                    mapAttr = new MappingAttribute(info.Name);
                }
                if (mapAttr != null)
                {
                    PropertyMappingInfo mapInfo = new PropertyMappingInfo(mapAttr.DataFieldName, mapAttr.NullValue, info);
                    mapInfoList.Add(mapInfo);
                }
            }
            return(mapInfoList);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Returns a list of <see cref="PropertyMappingInfo"/> instances that
        /// represents the mapping between the fields from the <paramref name="dataRecord"/> and
        /// the <paramref name="type"/> properties.
        /// </summary>
        /// <param name="type">The <see cref="Type"/> containing the target properties.</param>
        /// <param name="dataRecord">The <see cref="IDataRecord"/> that contains the target fields/columns.</param>
        /// <returns>A list of <see cref="PropertyMappingInfo"/> instances where each instance represents a match
        /// between a field/column name and a property name.</returns>
        public IEnumerable <PropertyMappingInfo> Execute(Type type, IDataRecord dataRecord)
        {
            var columnOrdinals = this.columnSelector.Execute(dataRecord);

            PropertyInfo[] properties = this.propertySelector.Execute(type);
            for (int index = 0; index < properties.Length; index++)
            {
                PropertyInfo property            = properties[index];
                var          propertyMappingInfo = new PropertyMappingInfo {
                    Property = property
                };
                int ordinal;
                if (!columnOrdinals.TryGetValue(property.Name, out ordinal))
                {
                    if (!columnOrdinals.TryGetValue(type.Name + "_" + property.Name, out ordinal))
                    {
                        ordinal = -1;
                    }
                }

                propertyMappingInfo.Ordinal = ordinal;
                yield return(propertyMappingInfo);
            }
        }