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); }
public MySqlWhereClauseBuilder(IObjectMappingResolver mappingResolver) : base(mappingResolver) { }
public SqlLiteServerWhereClauseBuilder(IObjectMappingResolver mappingResolver) : base(mappingResolver) { }
/// <summary> /// Initializes a new instance of <c>WhereClauseBuilderBase<T></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; }
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); } } }
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); } } }
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++; } }
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); }
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); }
public OracleWhereClauseBuilder(IObjectMappingResolver mappingResolver) : base(mappingResolver) { }