コード例 #1
0
ファイル: EntityMapper.cs プロジェクト: xiayu130/Bitter.Core
        public static TTarget Map <TSource, TTarget>(TSource source)
        {
            var target = (TTarget)ExpressionReflector.CreateInstance(typeof(TTarget), ObjectPropertyConvertType.Cast);

            Map(source, target);
            return(target);
        }
コード例 #2
0
        public SqlBuilderBase CreateSqlBuilder()
        {
            if (_providerTypes == null)
            {
                _providerTypes = (from x in Assembly.GetExecutingAssembly().GetTypes()
                                  where x.BaseType == typeof(SqlBuilderBase)
                                  select x).ToList();
            }
            var typeName = _provider.DatabaseType + ".SqlBuilder";
            var source   = from x in _providerTypes
                           where x.FullName.EndsWith(typeName)
                           select x;

            if (source.Count() > 1)
            {
                throw new NotSupportedException("找到了多个包含" + typeName + "的提供者类");
            }
            var type = source.FirstOrDefault();

            if (type == null)
            {
                throw new NotSupportedException("未找到提供者类:" + typeName);
            }
            object[] parameters = { _provider };
            return((SqlBuilderBase)ExpressionReflector.CreateInstance(type, ObjectPropertyConvertType.Cast, parameters));
        }
コード例 #3
0
ファイル: EntityMapper.cs プロジェクト: xiayu130/Bitter.Core
        public static Dictionary <string, object> GetPropertyValues(object entity)
        {
            var dictionary = new Dictionary <string, object>();

            foreach (var pair in ExpressionReflector.GetGetters(entity.GetType()))
            {
                dictionary.Add(pair.Key, pair.Value(entity));
            }
            return(dictionary);
        }
コード例 #4
0
ファイル: EntityMapper.cs プロジェクト: xiayu130/Bitter.Core
        public static void Map <TSource, TTarget>(TSource source, TTarget target)
        {
            var entityType = typeof(TTarget);
            var getters    = ExpressionReflector.GetGetters(typeof(TSource));
            var setters    = ExpressionReflector.GetSetters(entityType);

            foreach (var str in getters.Keys)
            {
                if (setters.ContainsKey(str))
                {
                    setters[str](target, getters[str](source));
                }
            }
        }
コード例 #5
0
ファイル: ProviderBase.cs プロジェクト: xiayu130/Bitter.Core
 public BuilderFactory CreateSqlBuilderFactory()
 {
     if (string.IsNullOrWhiteSpace(ConfigManager.SqlBuilder))
     {
         return(new BuilderFactory(this));
     }
     if (_type == null)
     {
         char[] separator = { ',' };
         var    assInfos  = ConfigManager.SqlBuilder.Split(separator);
         _type = Assembly.Load(assInfos[1]).GetTypes().FirstOrDefault(x => x.FullName == assInfos[0]);
     }
     object[] parameters = { this };
     return
         ((BuilderFactory)ExpressionReflector.CreateInstance(_type, ObjectPropertyConvertType.Cast, parameters));
 }
コード例 #6
0
ファイル: EntityMapper.cs プロジェクト: xiayu130/Bitter.Core
        public static List <TObject> Map <TObject>(DataSet ds) where TObject : class, new()
        {
            var list       = new List <TObject>();
            var entityType = typeof(TObject);
            var setters    = ExpressionReflector.GetSetters(entityType);
            var properties = ExpressionReflector.GetProperties(entityType);
            var table1     = ds.Tables[0];

            foreach (DataRow row in ds.Tables[0].Rows)
            {
                var local = Activator.CreateInstance <TObject>();
                foreach (var str in setters.Keys)
                {
                    var obj2 = row[str];
                    if (obj2 != DBNull.Value)
                    {
                        var propertyType   = properties[str].PropertyType;
                        var underlyingType = Nullable.GetUnderlyingType(propertyType);
                        if (underlyingType == null)
                        {
                            underlyingType = propertyType;
                        }
                        if (underlyingType.IsEnum)
                        {
                            obj2 = Enum.Parse(underlyingType, Convert.ToString(obj2));
                        }
                        else
                        {
                            obj2 = Convert.ChangeType(obj2, underlyingType);
                        }
                        setters[str](local, obj2);
                    }
                }
                list.Add(local);
            }
            return(list);
        }
コード例 #7
0
ファイル: EntityMapper.cs プロジェクト: xiayu130/Bitter.Core
        public static IList Map(Type objectType, DataSet ds, ObjectPropertyConvertType convertType)
        {
            var list       = (IList)Activator.CreateInstance(ReflectorConsts.ListObjectType);
            var setters    = ExpressionReflector.GetSetters(objectType);
            var properties = ExpressionReflector.GetProperties(objectType);
            var table1     = ds.Tables[0];

            foreach (DataRow row in ds.Tables[0].Rows)
            {
                object obj2 = null;
                if (objectType.IsSealed)
                {
                    var list2 = new List <object>();
                    foreach (DataColumn column in ds.Tables[0].Columns)
                    {
                        var item = row[column];
                        if (item == DBNull.Value)
                        {
                            item = null;
                        }
                        list2.Add(item);
                    }
                    if (TypeHelper.IsValueType(objectType))
                    {
                        obj2 = list2[0];
                    }
                    else
                    {
                        obj2 = ExpressionReflector.CreateInstance(objectType, convertType, list2.ToArray());
                    }
                }
                else
                {
                    obj2 = ExpressionReflector.CreateInstance(objectType, convertType);
                    foreach (DataColumn column2 in ds.Tables[0].Columns)
                    {
                        var obj4 = row[column2];
                        if (obj4 != DBNull.Value)
                        {
                            var info = properties[column2.ColumnName];
                            if (info != null)
                            {
                                var propertyType   = info.PropertyType;
                                var underlyingType = Nullable.GetUnderlyingType(propertyType);
                                if (underlyingType == null)
                                {
                                    underlyingType = propertyType;
                                }
                                if (underlyingType.IsEnum)
                                {
                                    obj4 = Enum.Parse(underlyingType, Convert.ToString(obj4));
                                }
                                else
                                {
                                    obj4 = Convert.ChangeType(obj4, underlyingType);
                                }
                                setters[column2.ColumnName](obj2, obj4);
                            }
                        }
                    }
                }
                list.Add(obj2);
            }
            return(list);
        }
コード例 #8
0
ファイル: EntityMapper.cs プロジェクト: xiayu130/Bitter.Core
 public static IList Map(Type type, IDataReader reader)
 {
     return(ExpressionReflector.GetDataReaderMapeer(type, reader)(reader));
 }