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; } } }
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); }
/// <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); }
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); }
/// <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); }
/// <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); }
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()); } }