Пример #1
0
        private static object ToClass(this object @object, Type resultType, IObjectMappingResolver customMappings, ObjectMappingConflictResolution conflictResolution = ObjectMappingConflictResolution.Exception)
        {
            if (@object == null)
            {
                return(null);
            }
            Type sourceType = @object.GetType();

            if (!resultType.IsInterface && !resultType.IsClass)
            {
                if (conflictResolution == ObjectMappingConflictResolution.Exception)
                {
                    throw new ClassMappingException(sourceType, resultType);
                }
            }

            object result;

#pragma warning disable IDE0045 // Convert to conditional expression
            if (sourceType.IsCollection())
#pragma warning restore IDE0045 // Convert to conditional expression
            {
                result = MapClass((IEnumerable)@object, sourceType, resultType, customMappings, conflictResolution);
            }
            else
            {
                result = MapClass(@object, sourceType, resultType, customMappings, conflictResolution);
            }
            return(result);
        }
Пример #2
0
 public MySqlWhereClauseBuilder(IObjectMappingResolver mappingResolver) : base(mappingResolver)
 {
 }
 public SqlLiteServerWhereClauseBuilder(IObjectMappingResolver mappingResolver) : base(mappingResolver)
 {
 }
Пример #4
0
 /// <summary>
 /// Initializes a new instance of <c>WhereClauseBuilderBase&lt;T&gt;</c> class.
 /// </summary>
 /// <param name="mappingResolver">The <c>Apworks.Storage.IStorageMappingResolver</c>
 /// instance which will be used for generating the mapped field names.</param>
 public WhereClauseBuilder(IObjectMappingResolver mappingResolver)
 {
     this.mappingResolver = mappingResolver;
 }
Пример #5
0
        private static void MapProperty(object value, object result, PropertyInfo sourceProperty, PropertyInfo resultProperty, IObjectMappingResolver customMappings, ObjectMappingConflictResolution conflictResolution)
        {
            Type type = resultProperty.PropertyType;

            if (value != null)
            {
                if (type.IsInterface || (type.IsClass && !type.IsAbstract))
                {
                    object convertedVallue = ToClass(value, type, customMappings, conflictResolution);
                    resultProperty.SetValue(result, convertedVallue, null);
                }
                else if (conflictResolution == ObjectMappingConflictResolution.Exception)
                {
                    throw new PropertyMappingException(sourceProperty, resultProperty);
                }
            }
        }
Пример #6
0
 private static void MapItems(IEnumerable sources, IList results, Type resultType, IObjectMappingResolver customMappings, ObjectMappingConflictResolution conflictResolution)
 {
     if (resultType.IsGenericType)
     {
         Type itemType = resultType.GetGenericArguments().First();
         foreach (object item in sources)
         {
             object result = MapClass(item, item.GetType(), itemType, customMappings, conflictResolution);
             _ = results.Add(result);
         }
     }
     else
     {
         foreach (object item in sources)
         {
             object result = MapClass(item, item.GetType(), item.GetType(), customMappings, conflictResolution);
             _ = results.Add(result);
         }
     }
 }
Пример #7
0
        private static void MapItems(IEnumerable sources, Array results, Type resultType, IObjectMappingResolver customMappings, ObjectMappingConflictResolution conflictResolution)
        {
            Type itemType = resultType.GetElementType();
            int  counter  = 0;

            foreach (object item in sources)
            {
                object result = MapClass(item, item.GetType(), itemType, customMappings, conflictResolution);
                results.SetValue(result, counter);
                counter++;
            }
        }
Пример #8
0
        private static object MapClass(IEnumerable sources, Type sourceType, Type resultType, IObjectMappingResolver customMappings, ObjectMappingConflictResolution conflictResolution)
        {
            if (!sourceType.IsCollection())
            {
                if (conflictResolution == ObjectMappingConflictResolution.Exception)
                {
                    throw new ClassMappingException(sourceType, resultType);
                }
                return(null);
            }

            int count = sources.Size();

            if (resultType.IsArray)
            {
                Type  itemType = resultType.GetElementType();
                Array results  = Array.CreateInstance(itemType, count);
                MapItems(sources, results, resultType, customMappings, conflictResolution);
                return(results);
            }
            else if (resultType == typeof(IEnumerable) || resultType == typeof(ICollection) || resultType == typeof(IList) ||
                     (resultType.IsGenericType && (resultType.GetGenericTypeDefinition() == typeof(IEnumerable <>) ||
                                                   resultType.GetGenericTypeDefinition() == typeof(ICollection <>) ||
                                                   resultType.GetGenericTypeDefinition() == typeof(IList <>))
                     )
                     )
            {
                if (resultType.IsGenericType)
                {
                    Type itemType = resultType.GetGenericArguments().First();
                    Type listType = typeof(List <>);
                    listType = listType.MakeGenericType(itemType);
                    IList results = Activator.CreateInstance(listType) as IList;
                    MapItems(sources, results, resultType, customMappings, conflictResolution);
                    return(results);
                }
                else
                {
                    Type  listType = typeof(ArrayList);
                    IList results  = Activator.CreateInstance(listType) as IList;
                    MapItems(sources, results, resultType, customMappings, conflictResolution);
                    return(results);
                }
            }
            else if (typeof(IList).IsAssignableFrom(resultType) && resultType.IsClass && !resultType.IsAbstract)
            {
                IList results = Activator.CreateInstance(resultType) as IList;
                MapItems(sources, results, resultType, customMappings, conflictResolution);
                return(results);
            }
            else if (conflictResolution == ObjectMappingConflictResolution.Exception)
            {
                throw new InvalidOperationException();
            }
            return(null);
        }
Пример #9
0
        private static object MapClass(object source, Type sourceType, Type resultType, IObjectMappingResolver customMappings, ObjectMappingConflictResolution conflictResolution)
        {
            if (sourceType.IsCollection())
            {
                if (conflictResolution == ObjectMappingConflictResolution.Exception)
                {
                    throw new ClassMappingException(sourceType, resultType);
                }
                return(null);
            }

            object result = Activator.CreateInstance(resultType);

            PropertyInfo[] sourceProperties = sourceType.GetProperties();
            PropertyInfo[] resultProperties = resultType.GetProperties();

            IClassMappingResolver mappingConfig = customMappings.GetConfiuration(sourceType, resultType);

            foreach (PropertyInfo sourceProperty in sourceProperties)
            {
                string targetName = sourceProperty.Name;
                if (mappingConfig != null)
                {
                    string remappedName = mappingConfig.GetTargetName(sourceProperty.Name);
                    if (remappedName != null)
                    {
                        targetName = remappedName;
                    }
                }
                PropertyInfo resultProperty = resultProperties.FirstOrDefault(x => { return(x.Name == targetName); });
                if (resultProperty == null)
                {
                    continue;
                }
                if (!sourceProperty.CanRead)
                {
                    continue;
                }
                if (!resultProperty.CanWrite)
                {
                    continue;
                }

                object value = sourceProperty.GetValue(source, null);
                if (MappingExpress.CanSetValue(sourceProperty, resultProperty))
                {
                    MappingExpress.SetValue(result, resultProperty, value);
                }
                else
                {
                    Type type = sourceProperty.PropertyType;
                    if (type.IsInterface || type.IsClass)
                    {
                        MapProperty(value, result, sourceProperty, resultProperty, customMappings, conflictResolution);
                    }
                    else if (conflictResolution == ObjectMappingConflictResolution.Exception)
                    {
                        throw new PropertyMappingException(sourceProperty, resultProperty);
                    }
                }
            }
            return(result);
        }
Пример #10
0
 public OracleWhereClauseBuilder(IObjectMappingResolver mappingResolver) : base(mappingResolver) { }