数据库实体生成小工具(C#+mysql)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DataTableToModel { public class CreateModel { public CreateModel( string tableName, string connectionString) { this .TableName = tableName; this .ConnectionString = connectionString; } /// <summary> /// 表名称 /// </summary> private string TableName { get ; set ; } /// <summary> /// 数据库链接 /// </summary> private string ConnectionString { get ; set ; } private string FieldPath = @"D:\\CreateEntityByDB" ; //获取所有的数据库名 //private static string GetAllDataSql = "SELECT NAME FROM MASTER.DBO.SYSDATABASES ORDER BY NAME"; ////获取所有的表名 //private static string GetAllTableSql = "SELECT name FROM sys.tables where type ='U'"; //获取所有的表信息 private static string GetTableInfoSql = @"SELECT DISTINCT a.COLUMN_NAME columnName, a.DATA_TYPE typeName, a.IS_NULLABLE isnullAble,a.COLUMN_COMMENT comment From INFORMATION_SCHEMA.Columns a LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE b ON a.TABLE_NAME=b.TABLE_NAME " ; //根据表名创建模型 public string CreateSingleModel() { try { string sql = $ "{GetTableInfoSql} where a.table_name='{TableName}'" ; using (MySqlConnection conn = new MySqlConnection(ConnectionString)) //ConnectionString为自己连接字符串 { MySqlCommand sqlCommand = new MySqlCommand(sql, conn); conn.Open(); MySqlDataReader reader = sqlCommand.ExecuteReader(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append($ "public class {TableName} \r\n{{\r\n" ); while (reader.Read()) { stringBuilder.Append($ "///<summary>\r\n///{reader[" comment "].ToString()}\r\n///</summary>\r\n" ); stringBuilder.Append($ " public {GetTypeOfColumn(reader[" typeName "].ToString(), reader[" isnullAble "].ToString())} {reader[" columnName "]} {{get;set;}}\r\n" ); } stringBuilder.Append( "} \r\n" ); string directory = string .IsNullOrEmpty(FieldPath) ? AppDomain.CurrentDomain.BaseDirectory + "\\Model\\" : FieldPath; //FieldPath为自己文件路径 StreamWriter sr; //是否存在文件夹,不存在则创建 if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } string path = directory + "\\" + TableName + ".txt" ; //如果该文件存在则追加内容,否则创建文件 if (File.Exists(path)) { sr = File.AppendText(path); } else { sr = File.CreateText(path); } sr.Write(stringBuilder.ToString()); sr.Flush(); sr.Close(); } } catch (Exception ex) { return ex.Message; } return "success" ; } //根据数据库直接生成所有模型 //public void BatchCreateModel() //{ // using (SqlConnection conn = new SqlConnection(ConnectionString))//ConnectionString为自己连接字符串 // { // SqlCommand sqlCommand = new SqlCommand(GetAllTableSql, conn); // conn.Open(); // SqlDataReader reader = sqlCommand.ExecuteReader(); // while (reader.Read()) // { // CreateSingleModel(reader["name"].ToString()); // } // } //} //获取列的类型 private string GetTypeOfColumn( string type, string nullAble) { //新增类型 if (type.Equals( "tinyint" ) && nullAble.Equals( "NO" )) return "byte" ; else if (type.Equals( "tinyint" ) && nullAble.Equals( "YES" )) return "byte?" ; else if (type.Equals( "smallint" ) && nullAble.Equals( "NO" )) return "int" ; else if (type.Equals( "smallint" ) && nullAble.Equals( "YES" )) return "int?" ; else if (type.Equals( "bit" ) && nullAble.Equals( "NO" )) return "bool" ; else if (type.Equals( "int" ) && nullAble.Equals( "NO" )) return "int" ; else if (type.Equals( "int" ) && nullAble.Equals( "YES" )) return "int?" ; else if (type.Equals( "bit" ) && nullAble.Equals( "Not" )) return "bool" ; else if (type.Equals( "bit" ) && nullAble.Equals( "YES" )) return "bool?" ; else if ((type.Equals( "decimal" ) || type.Equals( "numeric" ) || type.Equals( "float" ) || type.Equals( "real" )) && nullAble.Equals( "NO" )) return "decimal" ; else if ((type.Equals( "decimal" ) || type.Equals( "numeric" ) || type.Equals( "float" ) || type.Equals( "real" )) && nullAble.Equals( "YES" )) return "decimal?" ; else if (type.Equals( "datetime" ) && nullAble.Equals( "YES" )) return "DateTime?" ; else if (type.Equals( "datetime" ) && nullAble.Equals( "NO" )) return "DateTime" ; else if (type.Equals( "nchar" ) || type.Equals( "char" ) || type.Equals( "nvarchar" ) || type.Equals( "varchar" ) || type.Equals( "text" )) return "string" ; else throw new Exception( "无此类型" ); } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构