Beispiel #1
0
        public static Expression GetChildMapping(
            IObjectMappingData childMappingData,
            MappingValues mappingValues,
            int dataSourceIndex,
            ObjectMapperData declaredTypeMapperData)
        {
            var childMapperData = childMappingData.MapperData;

            if (childMapperData.IsRepeatMapping &&
                childMapperData.RuleSet.RepeatMappingStrategy.AppliesTo(childMapperData))
            {
                var repeatMappingCall = childMapperData
                                        .RuleSet
                                        .RepeatMappingStrategy
                                        .GetMapRepeatedCallFor(
                    childMappingData,
                    mappingValues,
                    dataSourceIndex,
                    declaredTypeMapperData);

                return(repeatMappingCall);
            }

            var inlineMappingBlock = GetInlineMappingBlock(
                childMappingData,
                mappingValues,
                MappingDataCreationFactory.ForChild(mappingValues, dataSourceIndex, childMapperData));

            return(inlineMappingBlock);
        }
Beispiel #2
0
        public static Expression GetElementMapping(
            IObjectMappingData elementMappingData,
            Expression sourceElementValue,
            Expression targetElementValue)
        {
            var enumerableMapperData = elementMappingData.Parent.MapperData;
            var elementMapperData    = elementMappingData.MapperData;

            Expression enumerableIndex, parentMappingDataObject;

            if (elementMapperData.Context.IsStandalone)
            {
                enumerableIndex         = elementMapperData.EnumerableIndex.GetNullableValueAccess();
                parentMappingDataObject = typeof(IObjectMappingData).ToDefaultExpression();
            }
            else
            {
                enumerableIndex         = enumerableMapperData.EnumerablePopulationBuilder.Counter;
                parentMappingDataObject = enumerableMapperData.MappingDataObject;
            }

            var mappingValues = new MappingValues(
                sourceElementValue,
                targetElementValue,
                enumerableIndex);

            elementMapperData.Context.IsForNewElement =
                (targetElementValue.NodeType == ExpressionType.Default) ||
                (elementMapperData.DeclaredTypeMapperData?.Context.IsForNewElement == true);

            if (elementMapperData.IsRepeatMapping &&
                elementMapperData.RuleSet.RepeatMappingStrategy.AppliesTo(elementMapperData))
            {
                var repeatMappingCall = elementMapperData
                                        .RuleSet
                                        .RepeatMappingStrategy
                                        .GetMapRepeatedCallFor(
                    elementMappingData,
                    mappingValues,
                    enumerableMapperData.DataSourceIndex,
                    enumerableMapperData);

                return(repeatMappingCall);
            }

            var inlineMappingBlock = GetInlineMappingBlock(
                elementMappingData,
                mappingValues,
                MappingDataCreationFactory.ForElement(mappingValues, parentMappingDataObject, elementMapperData));

            return(inlineMappingBlock);
        }
Beispiel #3
0
        public static Expression UseLocalToTargetDataSourceVariableIfAppropriate(
            ObjectMapperData mapperData,
            ObjectMapperData toTargetMapperData,
            Expression toTargetDataSourceValue,
            Expression mappingExpression)
        {
            if (!toTargetMapperData.Context.UsesMappingDataObject)
            {
                return(mappingExpression);
            }

            return(UseLocalValueVariable(
                       toTargetMapperData.MappingDataObject,
                       MappingDataCreationFactory.ForToTarget(mapperData, toTargetDataSourceValue),
                       mappingExpression));
        }
        private static Expression GetDerivedTypeRootMapping(
            IObjectMappingData derivedTypeMappingData,
            Expression sourceValue,
            Expression targetValue)
        {
            var mappingValues = new MappingValues(
                sourceValue,
                targetValue,
                typeof(int?).ToDefaultExpression());

            var inlineMappingBlock = MappingFactory.GetInlineMappingBlock(
                derivedTypeMappingData,
                mappingValues,
                MappingDataCreationFactory.ForDerivedType(derivedTypeMappingData.MapperData));

            return(inlineMappingBlock);
        }