Ejemplo n.º 1
0
        /// <summary>
        /// 获取列类型
        /// </summary>
        /// <returns></returns>
        private static ColumnType GetColumnType <T>(T ModelItem, object ModelVaue, string name)
        {
            var dynGet = new Property.DynamicGet <T>();
            var item   = new ColumnType();

            item.Name = name;
            var type = ModelVaue.ToStr().ToLower();

            switch (type)
            {
            case "char":
            case "nchar":
            case "varchar":
            case "nvarchar":
            case "varchar2":
            case "nvarchar2":
                item.Length = dynGet.GetValue(ModelItem, "Length", true).ToStr().ToInt(0);
                item.Type   = type;
                break;

            case "decimal":
            case "numeric":
            case "number":
                item.Precision = dynGet.GetValue(ModelItem, "Precision", true).ToStr().ToInt(0);
                item.Scale     = dynGet.GetValue(ModelItem, "Scale", true).ToStr().ToInt(0);
                item.Type      = type;
                break;

            default:
                item.Type = type;
                break;
            }

            return(item);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取datatabel
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="db"></param>
        /// <returns></returns>
        public static DataTable GetTable <T>(DbCommand cmd, List <T> list)
        {
            var dyn = new Property.DynamicGet <T>();
            var dt  = new DataTable();

            cmd.CommandText = string.Format("select top 1 * from {0}", typeof(T).Name);
            dt.Load(cmd.ExecuteReader());
            dt.Clear();

            list.ForEach(a => {
                var row = dt.NewRow();
                PropertyCache.GetPropertyInfo <T>().ForEach(p => {
                    row[p.Name] = dyn.GetValue(a, p.Name, true);
                });
                dt.Rows.Add(row);
            });

            return(dt);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// mysql
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <returns></returns>
        public static string GetMySql <T>(List <T> list)
        {
            var sql = new StringBuilder();

            sql.AppendFormat("insert into {0}(", typeof(T).Name);
            var dyn = new Property.DynamicGet <T>();

            PropertyCache.GetPropertyInfo <T>().ForEach(a => { sql.AppendFormat("{0},", a.Name); });

            sql.Append(")").Replace(",)", ")");

            list.ForEach(a => {
                sql.Append("(");
                PropertyCache.GetPropertyInfo <T>().ForEach(b => { sql.AppendFormat("'{0}',", dyn.GetValue(a, b.Name, true)); });
                sql.Append("),").Replace(",)", ")");
            });

            return(sql.ToStr().Substring(0, sql.ToStr().Length - 1));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 比对model
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <param name="CacheItem">缓存实体</param>
        /// <param name="modelItem">实体</param>
        /// <returns></returns>
        public static CompareModel <T> CompareTo <T>(T CacheItem, T modelItem) where T : class, new()
        {
            var dynGet = new Property.DynamicGet <T>();
            var dynSet = new Property.DynamicSet <T>();
            var result = new CompareModel <T>();

            result.Item = modelItem;

            if (modelItem == null)
            {
                result.RemoveName.Add(dynGet.GetValue(CacheItem, "Name", true).ToStr());
                result.IsDelete = true;
                return(result);
            }

            var type = dynGet.GetValue(modelItem, "DataType", true).ToStr();

            if (type == "")
            {
                type = dynGet.GetValue(CacheItem, "DataType", true).ToStr();
            }

            var name = dynGet.GetValue(modelItem, "Name", true).ToStr();

            if (name == "")
            {
                name        = dynGet.GetValue(CacheItem, "Name", true).ToStr();
                result.Item = CacheItem;
            }

            foreach (var info in PropertyCache.GetPropertyInfo <T>())
            {
                var modelValue = dynGet.GetValue(modelItem, info.Name, true);
                var cacheValue = dynGet.GetValue(CacheItem, info.Name, true);

                dynSet.SetValue(result.Item, info.Name, modelValue, true);


                if ((modelValue != null && cacheValue != null && modelValue.ToStr().ToLower() != cacheValue.ToStr().ToLower()) ||
                    (modelValue == null && cacheValue != null) || (modelValue != null && cacheValue == null))
                {
                    result.IsUpdate = true;

                    switch (info.Name)
                    {
                    case "IsKey":
                    {
                        if (!(bool)modelValue)
                        {
                            result.RemoveKey.Add(name);
                        }

                        if ((bool)modelValue)
                        {
                            result.AddKey.Add(GetColumnType <T>(modelItem, type, name));
                        }
                        break;
                    }

                    case "IsNull":
                    {
                        if (!(bool)modelValue)
                        {
                            result.RemoveNull.Add(GetColumnType <T>(modelItem, type, name));
                        }

                        if ((bool)modelValue)
                        {
                            result.AddNull.Add(GetColumnType <T>(modelItem, type, name));
                        }
                        break;
                    }

                    case "Name":
                    {
                        if (modelValue == null)
                        {
                            result.RemoveName.Add(name);
                        }

                        if (modelValue != null)
                        {
                            result.AddName.Add(GetColumnType <T>(modelItem, type, name));
                        }
                        break;
                    }

                    case "Length":
                    case "Precision":
                    case "Scale":
                    {
                        result.Type.Add(GetColumnType <T>(modelItem, type, name));
                        break;
                    }

                    case "DataType":
                    {
                        result.Type.Add(GetColumnType <T>(modelItem, modelValue, name));
                        break;
                    }

                    case "Comments":
                    {
                        result.Comments.Add(new ColumnComments {
                                Comments = modelValue.ToStr(), Name = name, Type = GetColumnType <T>(modelItem, type, name)
                            });
                        break;
                    }

                    default:
                        break;
                    }
                }
            }

            return(result);
        }