Esempio n. 1
0
        public static DriverBase CreateDriver(IConfigurationSource src = null, string typename = TypeName)
        {
            lock (lockobj)
            {
                string driverString;
                string connString;
                try
                {
                    if (db != null)
                    {
                        return(db);
                    }

                    if (Starter.Properties == null)
                    {
                        Starter.Initialize(typename, src);
                    }
                    Starter.Properties.TryGetValue(Environment.ConnectionDriver, out driverString);
                    Starter.Properties.TryGetValue(Environment.ConnectionString, out connString);

                    TypeX typex = TypeX.Create(ReflectHelper.ClassForName(driverString));
                    db = (DriverBase)typex.CreateInstance();
                    //db = (DriverBase)Activator.CreateInstance(ReflectHelper.ClassForName(driverString));
                    db.ConnString = connString;
                    return(db);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
Esempio n. 2
0
        public IEnumerable <T> BindModel <T>(object source)
        {
            DataTable dt = (DataTable)source;
            IEnumerable <DataColumn> dclist = dt.Columns.Cast <DataColumn>();
            List <T> modellist = new List <T>();

            foreach (DataRow dr in dt.Rows)
            {
                TypeX typex         = TypeX.Create(typeof(T));
                T     modelInstance = (T)typex.CreateInstance();
                //T modelInstance = (T)Activator.CreateInstance(typeof(T));
                foreach (PropertyInfo property in typeof(T).GetProperties())
                {
                    DataColumn dc = dclist.Where(item => string.Compare(property.Name, item.ColumnName, true) == 0).FirstOrDefault();

                    if (null != dc)
                    {
                        PropertyInfoX propx = PropertyInfoX.Create(property);
                        propx.SetValue(modelInstance, dr[dc.ColumnName]);

                        //property.SetValue(modelInstance, Convert.ChangeType(dr[dc.ColumnName], property.PropertyType),null);
                    }
                }
                modellist.Add(modelInstance);
            }

            return(modellist);
        }
Esempio n. 3
0
        /// <summary>尝试从指定数据行中读取指定名称列的数据</summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <param name="name">名称</param>
        /// <param name="value">数值</param>
        /// <returns></returns>
        protected static Boolean TryGetDataRowValue <T>(DataRow dr, String name, out T value)
        {
            value = default(T);
            if (dr == null || !dr.Table.Columns.Contains(name) || dr.IsNull(name))
            {
                return(false);
            }

            Object obj = dr[name];

            // 特殊处理布尔类型
            if (Type.GetTypeCode(typeof(T)) == TypeCode.Boolean && obj != null)
            {
                if (obj is Boolean)
                {
                    value = (T)obj;
                    return(true);
                }

                if ("YES".EqualIgnoreCase(obj.ToString()))
                {
                    value = (T)(Object)true;
                    return(true);
                }
                if ("NO".EqualIgnoreCase(obj.ToString()))
                {
                    value = (T)(Object)false;
                    return(true);
                }
            }

            try
            {
                if (obj is T)
                {
                    value = (T)obj;
                }
                else
                {
                    if (obj != null)
                    {
                        var tx = TypeX.Create(obj.GetType());
                        if (tx.IsInt)
                        {
                            var n = Convert.ToUInt64(obj);
                            if (n == UInt32.MaxValue && Type.GetTypeCode(typeof(T)) == TypeCode.Int32)
                            {
                                obj = -1;
                            }
                        }
                    }
                    value = (T)Reflect.ChangeType(obj, typeof(T));
                }
            }
            catch { return(false); }

            return(true);
        }
Esempio n. 4
0
        static String GetName(Type type)
        {
            if (type.HasElementType)
            {
                return("ArrayOf" + GetName(type.GetElementType()));
            }

            String name = TypeX.Create(type).Name;

            name = name.Replace("<", "_");
            //name = name.Replace(">", "_");
            name = name.Replace(",", "_");
            name = name.Replace(">", "");
            return(name);
        }
Esempio n. 5
0
        /// <summary>
        /// 根据实体名称,获取此实体字段名称的数组List<string>
        /// </summary>
        /// <param name="typeName">完整实体名称, [命名空间.实体名称]</param>
        /// <returns></returns>
        public static List <string> GetEntityFieldList(this string tableName)
        {
            List <string> list = new List <string>();

            tableName = string.Format("{0}.{1}", ConfigHelper.GetAppSettings("EntitySpaceName"), tableName);
            TypeX  EntityType = TypeX.Create(TypeX.GetType(tableName, true));  //根据类的完整名称建立类的类型,用于动态创建类 如: Clump.Mobile.Models.NewsInfo
            Object objEntity  = EntityType.CreateInstance();                   //动态建立类的对象 实体类的对象Object objEntity = EntityType.CreateInstance(true);意思是在创建实体对象时 A a = new A(true)

            PropertyInfo[] props        = objEntity.GetType().GetProperties(); //获取此对象的,字段集合
            object         propertValue = String.Empty;

            foreach (PropertyInfo item in props)
            {
                list.Add(item.Name);
            }
            return(list);
        }
Esempio n. 6
0
        /// <summary>
        /// [OLD Code]返回一个新创建的实体对象,并给各个字段赋值
        /// </summary>
        /// <param name="typeName">完整实体名称, [命名空间.实体名称]</param>
        /// <param name="rval">表单集合字符串</param>
        /// <returns></returns>
        public static object GetFormEntity(this string rval, string typeName)
        {
            typeName = string.Format("{0}.{1}", ConfigHelper.GetAppSettings("EntitySpaceName"), typeName);
            TypeX  EntityType = TypeX.Create(TypeX.GetType(typeName, true));   //根据类的完整名称建立类的类型,用于动态创建类 如: Clump.Mobile.Models.NewsInfo
            Object objEntity  = EntityType.CreateInstance();                   //动态建立类的对象 实体类的对象Object objEntity = EntityType.CreateInstance(true);意思是在创建实体对象时 A a = new A(true)

            PropertyInfo[] props        = objEntity.GetType().GetProperties(); //获取此对象的,字段集合
            object         propertValue = String.Empty;

            foreach (PropertyInfo item in props)
            {
                propertValue = rval.GetFromValue(item.Name);
                if (!"".Equals(propertValue))
                {
                    //根据字段类型,转换格式
                    switch ((PropertyInfoX.Create(EntityType, item.Name)).Property.PropertyType.Name)
                    {
                    case "String": propertValue = Convert.ToString(propertValue); break;

                    case "Int64": propertValue = Convert.ToInt64(propertValue); break;

                    case "Int32": propertValue = Convert.ToInt32(propertValue); break;

                    case "Int16": propertValue = Convert.ToInt16(propertValue); break;

                    case "Byte": propertValue = Convert.ToByte(propertValue); break;

                    case "Single": propertValue = Convert.ToSingle(propertValue); break;

                    case "Double": propertValue = Convert.ToDouble(propertValue); break;

                    case "Boolean": propertValue = Convert.ToBoolean(propertValue); break;

                    case "DateTime": propertValue = Convert.ToDateTime(propertValue); break;

                    default: break;
                    }
                    PropertyInfoX.SetValue(objEntity, item.Name, propertValue);//给字段赋值
                }
            }
            PropertyInfoX.SetValue(objEntity, "CreateTime", DateTime.Now);//给CreateTime字段赋值,添加时间字段是每个数据表标配(未解决:MySql配置,暂时不能默认添加当前时间)
            return(objEntity);
        }
Esempio n. 7
0
        private static String ConstructGeneratorCode(TemplateItem item, Boolean lineNumbers, String namespaceName, CodeDomProvider provider)
        {
            // 准备类名和命名空间
            CodeNamespace codeNamespace = new CodeNamespace(namespaceName);

            // 加入引用的命名空间
            foreach (String str in item.Imports)
            {
                if (!String.IsNullOrEmpty(str))
                {
                    codeNamespace.Imports.Add(new CodeNamespaceImport(str));
                }
            }
            CodeTypeDeclaration typeDec = new CodeTypeDeclaration(item.ClassName);

            typeDec.IsClass = true;
            codeNamespace.Types.Add(typeDec);

            // 基类
            if (!String.IsNullOrEmpty(item.BaseClassName))
            {
                typeDec.BaseTypes.Add(new CodeTypeReference(item.BaseClassName));
            }
            else if (!String.IsNullOrEmpty(BaseClassName))
            {
                typeDec.BaseTypes.Add(new CodeTypeReference(BaseClassName));
            }
            else
            {
                typeDec.BaseTypes.Add(new CodeTypeReference(typeof(TemplateBase)));
            }

            if (!String.IsNullOrEmpty(item.Name))
            {
                typeDec.LinePragma = new CodeLinePragma(item.Name, 1);
            }

            // Render方法
            CreateRenderMethod(item.Blocks, lineNumbers, typeDec);

            // 代码生成选项
            CodeGeneratorOptions options = new CodeGeneratorOptions();

            options.VerbatimOrder            = true;
            options.BlankLinesBetweenMembers = false;
            options.BracingStyle             = "C";

            // 其它类成员代码块
            Boolean firstMemberFound = false;

            foreach (Block block in item.Blocks)
            {
                firstMemberFound = GenerateMemberForBlock(block, typeDec, lineNumbers, provider, options, firstMemberFound);
            }

            // 模版变量
            if (item.Vars != null && item.Vars.Count > 0)
            {
                // 构建静态构造函数,初始化静态属性Vars
                CreateCctorMethod(typeDec, item.Vars);

                //public Int32 VarName
                //{
                //    get { return (Int32)GetData("VarName"); }
                //    set { Data["VarName"] = value; }
                //}
                foreach (String v in item.Vars.Keys)
                {
                    TypeX  vtype    = TypeX.Create(item.Vars[v]);
                    String codeName = vtype.FullName;

                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine();
                    sb.AppendFormat("public {0} {1}", codeName, v);
                    sb.AppendLine("{");
                    sb.AppendFormat("    get {{ return GetData<{0}>(\"{1}\"); }}", codeName, v);
                    sb.AppendLine();
                    sb.AppendFormat("    set {{ Data[\"{0}\"] = value; }}", v);
                    sb.AppendLine();
                    sb.AppendLine("}");

                    CodeSnippetTypeMember member = new CodeSnippetTypeMember(sb.ToString());
                    typeDec.Members.Add(member);
                }
            }

            // 输出
            using (StringWriter writer = new StringWriter())
            {
                provider.GenerateCodeFromNamespace(codeNamespace, new IndentedTextWriter(writer), options);
                return(writer.ToString());
            }
        }