C# .NetCore 通过 反射 ORM ,代码生成器
这篇文章,目前这个功能的已经被用作若干项目,写出来的目的,就是了让大家了解一下 代码生成器,和反射的作用,作为学习资料。
首先加载数据库,查询出数据库下对应的数据表
DataTable datatableList = bll.GetDataTable("SELECT Name FROM SysObjects Where XType='U' ORDER BY Name"); foreach (System.Data.DataRow dr in datatableList.Rows) { this.lst_Tables.Items.Add(dr[0].ToString()); }
创建数据库实体类文件
1 public static void tableToCSharpClass(DataTable rsmd, String _namespace, String className, string filepath) 2 { 3 try 4 { 5 System.Text.StringBuilder cs = new System.Text.StringBuilder(), 6 csFiled = new System.Text.StringBuilder(), 7 csProperty = new System.Text.StringBuilder(); 8 string line = Environment.NewLine; 9 //加入命名空间 10 cs.Append("using System;").Append(line).Append(line); 11 cs.Append("/*").Append(line); 12 cs.Append(" *本代码部分为程序自动生成").Append(line); 13 cs.Append(" * 使用前请检查").Append(line); 14 cs.Append(" */").Append(line).Append(line); 15 cs.Append("namespace ").Append(_namespace).Append(" {"); 16 cs.Append(line).Append(line); 17 //加入类名 18 cs.Append("/// <summary>").Append(line); 19 cs.Append("//实体类").Append(line); 20 cs.Append("/// </summary>").Append(line); 21 cs.Append(" public class ").Append(className).Append(" {"); 22 cs.Append(line).Append(line); 23 24 int c = rsmd.Columns.Count; 25 System.Data.DataColumn[] pKeycolum = rsmd.PrimaryKey; 26 string type, name, pKey = string.Empty; 27 System.Object t; 28 for (int i = 0; i <= c - 1; i++) 29 { 30 name = rsmd.Columns[i].ColumnName.Replace(' ', '_'); 31 System.Type dbType = rsmd.Columns[i].DataType; 32 string allowDBNull = "字段允许为空:" + rsmd.Columns[i].AllowDBNull.ToString(); 33 string maxLong = "字段长度:" + rsmd.Columns[i].MaxLength.ToString(); 34 foreach (System.Data.DataColumn colum in pKeycolum) 35 { 36 if (name == colum.ColumnName) 37 { 38 pKey = "主键"; 39 } 40 } 41 t = dbType.ToString(); 42 string summary = string.Empty; 43 summary = "///" + name + line 44 + "///" + allowDBNull + line 45 + "///" + maxLong + line; 46 type = MSSQLServerDataTypeCSharpTypeMap(dbType); 47 48 if (t != null) 49 { 50 type = t.ToString(); 51 } 52 else 53 { 54 type = "___" + dbType; 55 } 56 //加入私有字段 57 csFiled.Append(line).Append(line); 58 csFiled.Append("/// <summary>").Append(line); 59 csFiled.Append("///私有字段").Append(line); 60 csFiled.Append(summary); 61 csFiled.Append("/// </summary>").Append(line); 62 if ((type != "System.String") && (type != "System.Byte") && (type != "System.Single") && (type != "System.Byte[]")) 63 { 64 csFiled.Append(" private ").Append(type + "?").Append(" _").Append(name).Append(";").Append(line); 65 } 66 else 67 { 68 csFiled.Append(" private ").Append(type).Append(" _").Append(name).Append(";").Append(line); 69 } 70 //加入共有方法 71 csProperty.Append(line).Append(line); 72 csProperty.Append("/// <summary>").Append(line); 73 csProperty.Append("///公有属性").Append(line); 74 csProperty.Append(summary); 75 csProperty.Append("/// </summary>").Append(line); 76 if ((type != "System.String") && (type != "System.Byte") && (type != "System.Single") && (type != "System.Byte[]")) 77 { 78 csProperty.Append(" public ").Append(type + "?").Append(" ").Append(name).Append(line); 79 } 80 else 81 { 82 csProperty.Append(" public ").Append(type).Append(" ").Append(name).Append(line); 83 } 84 csProperty.Append("{").Append(line); 85 csProperty.Append(" get {").Append(line); 86 csProperty.Append(" return ").Append(" _").Append(name).Append(";").Append(line); 87 csProperty.Append("}").Append(line); 88 csProperty.Append(" set {").Append(line); 89 csProperty.Append(" _").Append(name).Append(" = value ;").Append(line); 90 csProperty.Append("}").Append(line); 91 csProperty.Append("}").Append(line); 92 } 93 94 cs.Append(csFiled).Append(csProperty); 95 cs.Append(" }").Append(line); 96 cs.Append("}").Append(line); 97 System.IO.File.Delete(className + ".cs"); 98 string path = filepath + @"\"; 99 System.IO.StreamWriter sw = System.IO.File.CreateText(path + className + ".cs"); 100 sw.Write(cs.ToString()); 101 sw.Close(); 102 sw.Dispose(); 103 } 104 catch (Exception ex) 105 { 106 MessageBox.Show(ex.ToString()); 107 } 108 }
SQL Server 字段类型映射
1 public static string MSSQLServerDataTypeCSharpTypeMap(System.Type _type) 2 { 3 4 string _Result = string.Empty; 5 switch (_type.ToString()) 6 { 7 case "tinyint": 8 _Result = "tinyint"; 9 break; 10 case "char": 11 _Result = "string"; 12 break; 13 case "varchar": 14 _Result = "string"; 15 break; 16 case "nvarchar": 17 _Result = "string"; 18 break; 19 case "text": 20 _Result = "string"; 21 break; 22 case "datetime": 23 _Result = "DateTime"; 24 break; 25 case "int": 26 _Result = "int"; 27 break; 28 //case "intidentity": 29 // _Result = "float"; 30 // break; 31 case "float": 32 _Result = "float"; 33 break; 34 case "bit": 35 _Result = "string"; 36 break; 37 case "numeric": 38 _Result = "double"; 39 break; 40 case "money": 41 _Result = "double"; 42 break; 43 case "image": 44 _Result = "image"; 45 break; 46 47 } 48 return _Result; 49 }

浙公网安备 33010602011771号