MySQL生成模型

根据数据库表生成Model

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.Text;
  5 using MySql.Data.MySqlClient;
  6
  7 namespace ClassLibrary
  8 {
  9     /// <summary>
 10     /// 生成模型
 11     /// </summary>
 12     public static class GenerativeModel
 13     {
 14         #region 获取服务器所有库 MySQL_GetDBs
 15         /// <summary>
 16         /// 获取服务器所有库
 17         /// </summary>
 18         /// <param name="connStr">连接字符串</param>
 19         /// <returns></returns>
 20         public static List<string> MySQL_GetDBs(string connStr)
 21         {
 22             return GetListString(connStr, "SHOW DATABASES");
 23         }
 24         #endregion
 25
 26         #region 获取数据库所有表 MySQL_GetTables
 27         /// <summary>
 28         /// 获取数据库所有表
 29         /// </summary>
 30         /// <param name="connStr">连接字符串</param>
 31         /// <returns></returns>
 32         public static List<string> MySQL_GetTables(string connStr)
 33         {
 34             return GetListString(connStr, "SHOW TABLES");
 35         }
 36         #endregion
 37
 38         #region 获取MySQL实体类 MySQL_GetModel
 39         #region 获取MySQL实体类
 40         /// <summary>
 41         /// 获取MySQL实体类
 42         /// </summary>
 43         /// <param name="connStr">连接字符串</param>
 44         /// <param name="tableName">表名</param>
 45         /// <param name="modelName">生成模型名</param>
 46         /// <param name="spaceName">模型命名空间名</param>
 47         /// <returns></returns>
 48         public static string MySQL_GetModel(string connStr, string tableName, string modelName, string spaceName)
 49         {
 50             try
 51             {
 52                 List<MySQLTable> ls = MySQLHelp.GetList<MySQLTable>(connStr, "SHOW FULL FIELDS FROM " + tableName);
 53                 StringBuilder sb = new StringBuilder();
 54                 sb.Append("using System;\nusing System.Collections.Generic;\n");//引用基础类库
 55                 sb.AppendFormat("namespace {0}", spaceName).Append("\n{\n");//命名空间
 56                 sb.AppendFormat("\tpublic class {0}", modelName).Append("\n\t{\n");//类
 57                 foreach (var item in ls)
 58                 {
 59                     sb.AppendFormat("\t\t///<summary>\n\t\t///{0}\n\t\t///</summary>\n", item.Comment);//注释
 60                     string field = item.Field.Substring(0, 1).ToUpper() + item.Field.Substring(1);//字段名
 61                     sb.AppendFormat("\t\tpublic {0} {1} ", typeConvert(item.Type), field).Append("{get;set;}\n");//添加属性
 62                 }
 63                 sb.Append("\t}\n}");
 64                 return sb.ToString();
 65             }
 66             catch (System.Exception)
 67             {
 68             }
 69             return null;
 70         }
 71         #endregion
 72
 73         #region MySQL类型转换成C#类型
 74         private static string typeConvert(string type)
 75         {
 76             type = type.ToLower();
 77             if (type.StartsWith("varchar") || type.StartsWith("char") || type.StartsWith("enum"))
 78             {
 79                 return "string";
 80             }
 81             if (type.StartsWith("date") || type.StartsWith("datetime"))
 82             {
 83                 return "DateTime";
 84             }
 85             if (type.StartsWith("int") || type.StartsWith("tinyint") || type.StartsWith("smallint") || type.StartsWith("mediumint"))
 86             {
 87                 return "int";
 88             };
 89             if (type.StartsWith("bigint"))
 90             {
 91                 return "long";
 92             };
 93             if (type.StartsWith("double") || type.StartsWith("float"))
 94             {
 95                 return "double";
 96             }
 97             if (type.StartsWith("decimal"))
 98             {
 99                 return "decimal";
100             }
101             return "[类型]";
102         }
103         #endregion
104
105         #region 表结构
106         public class MySQLTable
107         {
108             /// <summary>
109             /// 字段名
110             /// </summary>
111             public string Field { get; set; }
112             /// <summary>
113             /// 字段类型
114             /// </summary>
115             public string Type { get; set; }
116             /// <summary>
117             ///
118             /// </summary>
119             public string Collation { get; set; }
120             /// <summary>
121             /// 是否可为null
122             /// </summary>
123             public string Null { get; set; }
124             /// <summary>
125             ///
126             /// </summary>
127             public string Key { get; set; }
128             /// <summary>
129             /// 默认值
130             /// </summary>
131             public string Default { get; set; }
132             /// <summary>
133             ///
134             /// </summary>
135             public string Extra { get; set; }
136             /// <summary>
137             ///
138             /// </summary>
139             public string Privileges { get; set; }
140             /// <summary>
141             /// 备注
142             /// </summary>
143             public string Comment { get; set; }
144
145         }
146         #endregion
147         #endregion
148
149         #region 获取DataReader
150         /// <summary>
151         /// 获取DataReader
152         /// </summary>
153         /// <param name="connStr">数据库连接字符串</param>
154         /// <param name="comText">SQL语句</param>
155         /// <returns>DataReader</returns>
156         public static MySqlDataReader ExecuteDataReader(string connStr, string comText)
157         {
158             MySqlConnection conn = new MySqlConnection(connStr);
159             MySqlCommand com = new MySqlCommand();
160             if (conn.State == ConnectionState.Closed) { conn.Open(); }
161             com.Connection = conn;
162             com.CommandType = CommandType.Text;
163             com.CommandText = comText;
164             return com.ExecuteReader(CommandBehavior.CloseConnection);
165         }
166         #endregion
167
168         #region 获取List<string>
169         /// <summary>
170         /// 获取List
171         /// </summary>
172         /// <param name="connStr">数据库连接字符串</param>
173         /// <param name="comText">SQL语句</param>
174         /// <returns></returns>
175         private static List<string> GetListString(string connStr, string cmdText)
176         {
177             try
178             {
179                 List<string> ls = new List<string>();
180                 MySqlDataReader read = ExecuteDataReader(connStr, cmdText);
181                 while (read.Read())
182                 {
183                     for (int i = 0; i < read.FieldCount; i++)
184                     {
185                         if (read[i] != DBNull.Value)
186                         {
187                             ls.Add(read[i].ToString());
188                         }
189                     }
190                 }
191                 return ls;
192             }
193             catch (System.Exception)
194             {
195                 return null;
196             }
197         }
198         #endregion
199
200         #region 获取List<T>
201         /// <summary>
202         /// 获取List
203         /// </summary>
204         /// <typeparam name="T">类型</typeparam>
205         /// <param name="connStr">数据库连接字符串</param>
206         /// <param name="comText">SQL语句</param>
207         /// <returns></returns>
208         public static List<T> GetList<T>(string connStr, string comText) where T : class,new()
209         {
210             MySqlDataReader read = ExecuteDataReader(connStr, comText);
211             List<T> ls = (read.HasRows ? new List<T>() : null);//是否有数据
212             while (read.Read())
213             {
214                 Type type = typeof(T);//获取类型
215                 T t = new T();//创建实例
216                 foreach (var item in type.GetProperties())//取出属性
217                 {
218                     for (int i = 0; i < read.FieldCount; i++)
219                     {
220                         if (item.Name.ToLower() == read.GetName(i).ToLower() && read[i] != DBNull.Value)//属性名与查询出来的列名比较,且至不能为null
221                         {
222                             item.SetValue(t, read[i], null);
223                             break;
224                         }
225                     }
226                 }
227                 ls.Add(t);
228             };
229             return ls;
230         }
231         #endregion
232     }
233 }

时间: 2024-11-13 11:37:52

MySQL生成模型的相关文章

EF6添加mysql的edmx实体时报错:无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull

EF6.1.3 ,使用mysql5.7的实体数据模型时,提示: 由于出现以下异常,无法生成模型:"System.Data.StrongTypingException: 表"TableDetails"中列"IsPrimaryKey"的值为 DBNull 网上的解决办法都是: 1. 运行services.msc,重启MySQL服务. 2. 在MySQL运行一下命令: use mydbname; set global optimizer_switch='deri

判别模型和生成模型

我们有时称判别模型求的是条件概率,生成模型求的是联合概率. 常见的判别模型有线性回归.对数回归.线性判别分析.支持向量机.boosting.条件随机场.神经网络等. 常见的生产模型有隐马尔科夫模型.朴素贝叶斯模型.高斯混合模型.LDA.Restricted Boltzmann Machine等. 判别方法:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型.基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型. 生成方法:由数据学习联

DataUml Design 教程7 - 数据库生成模型

DataUml Design支持数据库生成模型,并支持外键关系,能够根据外键自动生成类与类之间的关系. 目前DataUML Design支持MS Server.MY SQL.Oracle和Access数据库,其它数据库待续. DataUml Design支持数据库表生成类图,支持浏览数据库对象功能. 一.浏览数据库对象 1.选择要查看的数据库对象,鼠标右键,点击"连接"菜单.如下图7-1 图7-1 连接成功之后,加载数据库中所有表,如下图7-2 图7-2 2.再选择数据库节点对象,鼠标

highcharts实例教程一:结合php与mysql生成折线图

Highcharts是一款纯javascript和html5编写的图表库,不仅几乎能兼容所有pc浏览器,而且对ios和android手机端的兼容 性也不错,它能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.折线图.面积图.柱状图.饼图.散点图 等多达28种不同类型的图表,还支持3D立体图表的生成,可以满足你对Web图表的任何需求 !而且Highcharts对学习者.非商业机构是免费使用的. 案例场景:要求针对技术cto网站,直观地显示一周网站pv.

生成模型和判别模型(转)

引入 监督学习的任务就是学习一个模型(或者得到一个目标函数),应用这一模型,对给定的输入预测相应的输出.这一模型的一般形式为一个决策函数Y=f(X),或者条件概率分布P(Y|X).监督学习方法又可以分为生成方法(generative approach)和判别方法(discriminative approach).所学到的模型分别为生成模型(generative model)和判别模型(discriminative model). 决策函数和条件概率分布 决策函数Y=f(X) 决策函数Y=f(X)

生成模型和判别模型

对于输入x,类别标签Y: 判别模型:由数据直接学习决策面Y=f(x)或条件概率P(Y|x)作为预测模型 生成模型:由数据学习联合概率分布P(x,Y),然后求出条件概率P(Y|x)作为预测模型 模型区别: 判别模型寻找不同类别之间的分离面,反映不同类别之间的差异. 生成模型通过统计反映同类数据的相似度. 模型的优点和缺点: 判别模型主要缺点: 1,不能反映数据本身的特征 判别模型主要优点: 1,模型简单,容易学习. 2,分类性能好,分类边界灵活. 生成模型的主要缺点: 1,模型复杂 生成模型主要优

《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5  从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数据保存前执行一些操作. 解决方案 假设你有如图7-7所示的模型. 图7-7. 包含实体Technician和ServiceCall的模型 在这个模型中,每个技术员(technician)都有一些业务服务请求(service call),业务服务请求包含联系人姓名,问题.使用代码清单7-4,创建一个扩展方法获取

ASP.NET MVC 3 配置EF自动生成模型

Tools(工具) =>  扩展工具 => Nuget Tools(工具) => Nuget=>程序包管理器控制台 Nuget 程序包管理器 => Install-Package EntityFramework  (为了安装Efcodefirst) EFCodeFirst => entity framework.dll(控制器用到EF的时候需要添加引用 ,目前版本是6.1) EfPowerTools => 模型生成器 类 => 右键 => entity

生成模型与判别模型

摘要: 1.定义 2.常见算法 3.区别 4.优缺点 内容: 1.定义 1.1 生成模型: 在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下.它给观测值和标注数据序列指定一个联合概率分布(joint probability distribution).在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布.条件概率分布可以由生成模型根据贝叶斯准则形成  (参考自:中文wiki) 1