根据数据库表生成Model

 using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using MySql.Data.MySqlClient; namespace ClassLibrary
{
/// <summary>
/// 生成模型
/// </summary>
public static class GenerativeModel
{
#region 获取服务器所有库 MySQL_GetDBs
/// <summary>
/// 获取服务器所有库
/// </summary>
/// <param name="connStr">连接字符串</param>
/// <returns></returns>
public static List<string> MySQL_GetDBs(string connStr)
{
return GetListString(connStr, "SHOW DATABASES");
}
#endregion #region 获取数据库所有表 MySQL_GetTables
/// <summary>
/// 获取数据库所有表
/// </summary>
/// <param name="connStr">连接字符串</param>
/// <returns></returns>
public static List<string> MySQL_GetTables(string connStr)
{
return GetListString(connStr, "SHOW TABLES");
}
#endregion #region 获取MySQL实体类 MySQL_GetModel
#region 获取MySQL实体类
/// <summary>
/// 获取MySQL实体类
/// </summary>
/// <param name="connStr">连接字符串</param>
/// <param name="tableName">表名</param>
/// <param name="modelName">生成模型名</param>
/// <param name="spaceName">模型命名空间名</param>
/// <returns></returns>
public static string MySQL_GetModel(string connStr, string tableName, string modelName, string spaceName)
{
try
{
List<MySQLTable> ls = MySQLHelp.GetList<MySQLTable>(connStr, "SHOW FULL FIELDS FROM " + tableName);
StringBuilder sb = new StringBuilder();
sb.Append("using System;\nusing System.Collections.Generic;\n");//引用基础类库
sb.AppendFormat("namespace {0}", spaceName).Append("\n{\n");//命名空间
sb.AppendFormat("\tpublic class {0}", modelName).Append("\n\t{\n");//类
foreach (var item in ls)
{
sb.AppendFormat("\t\t///<summary>\n\t\t///{0}\n\t\t///</summary>\n", item.Comment);//注释
string field = item.Field.Substring(, ).ToUpper() + item.Field.Substring();//字段名
sb.AppendFormat("\t\tpublic {0} {1} ", typeConvert(item.Type), field).Append("{get;set;}\n");//添加属性
}
sb.Append("\t}\n}");
return sb.ToString();
}
catch (System.Exception)
{
}
return null;
}
#endregion #region MySQL类型转换成C#类型
private static string typeConvert(string type)
{
type = type.ToLower();
if (type.StartsWith("varchar") || type.StartsWith("char") || type.StartsWith("enum"))
{
return "string";
}
if (type.StartsWith("date") || type.StartsWith("datetime"))
{
return "DateTime";
}
if (type.StartsWith("int") || type.StartsWith("tinyint") || type.StartsWith("smallint") || type.StartsWith("mediumint"))
{
return "int";
};
if (type.StartsWith("bigint"))
{
return "long";
};
if (type.StartsWith("double") || type.StartsWith("float"))
{
return "double";
}
if (type.StartsWith("decimal"))
{
return "decimal";
}
return "[类型]";
}
#endregion #region 表结构
public class MySQLTable
{
/// <summary>
/// 字段名
/// </summary>
public string Field { get; set; }
/// <summary>
/// 字段类型
/// </summary>
public string Type { get; set; }
/// <summary>
///
/// </summary>
public string Collation { get; set; }
/// <summary>
/// 是否可为null
/// </summary>
public string Null { get; set; }
/// <summary>
///
/// </summary>
public string Key { get; set; }
/// <summary>
/// 默认值
/// </summary>
public string Default { get; set; }
/// <summary>
///
/// </summary>
public string Extra { get; set; }
/// <summary>
///
/// </summary>
public string Privileges { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Comment { get; set; } }
#endregion
#endregion #region 获取DataReader
/// <summary>
/// 获取DataReader
/// </summary>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="comText">SQL语句</param>
/// <returns>DataReader</returns>
public static MySqlDataReader ExecuteDataReader(string connStr, string comText)
{
MySqlConnection conn = new MySqlConnection(connStr);
MySqlCommand com = new MySqlCommand();
if (conn.State == ConnectionState.Closed) { conn.Open(); }
com.Connection = conn;
com.CommandType = CommandType.Text;
com.CommandText = comText;
return com.ExecuteReader(CommandBehavior.CloseConnection);
}
#endregion #region 获取List<string>
/// <summary>
/// 获取List
/// </summary>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="comText">SQL语句</param>
/// <returns></returns>
private static List<string> GetListString(string connStr, string cmdText)
{
try
{
List<string> ls = new List<string>();
MySqlDataReader read = ExecuteDataReader(connStr, cmdText);
while (read.Read())
{
for (int i = ; i < read.FieldCount; i++)
{
if (read[i] != DBNull.Value)
{
ls.Add(read[i].ToString());
}
}
}
return ls;
}
catch (System.Exception)
{
return null;
}
}
#endregion #region 获取List<T>
/// <summary>
/// 获取List
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="comText">SQL语句</param>
/// <returns></returns>
public static List<T> GetList<T>(string connStr, string comText) where T : class,new()
{
MySqlDataReader read = ExecuteDataReader(connStr, comText);
List<T> ls = (read.HasRows ? new List<T>() : null);//是否有数据
while (read.Read())
{
Type type = typeof(T);//获取类型
T t = new T();//创建实例
foreach (var item in type.GetProperties())//取出属性
{
for (int i = ; i < read.FieldCount; i++)
{
if (item.Name.ToLower() == read.GetName(i).ToLower() && read[i] != DBNull.Value)//属性名与查询出来的列名比较,且至不能为null
{
item.SetValue(t, read[i], null);
break;
}
}
}
ls.Add(t);
};
return ls;
}
#endregion
}
}

MySQL生成模型的更多相关文章

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

    EF6.1.3 ,使用mysql5.7的实体数据模型时,提示: 由于出现以下异常,无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中 ...

  2. EF生成模型出现异常:表“TableDetails“中列“IsPrimaryKey”的值为DBNull解决方法

    Entity Framework连接MySQL时:由于出现以下异常,无法生成模型:"表"TableDetails"中列"IsPrimaryKey"的值 ...

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

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5  从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数 ...

  4. 生成模型(Generative Model)与判别模型(Discriminative Model)

    摘要: 1.定义 2.常见算法 3.特性 4.优缺点 内容: 1.定义 1.1 生成模型: 在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下.它给观测值和标 ...

  5. 生成模型(Generative)和判别模型(Discriminative)

    生成模型(Generative)和判别模型(Discriminative) 引言    最近看文章<A survey of appearance models in visual object ...

  6. 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...

  7. HMM 自学教程(二)生成模型

    本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...

  8. highcharts实例教程二:结合php与mysql生成饼图

    上回我们分析了用highcharts结合php和mysql生成折线图的实例,这次我们以技术cto网站搜索引擎流量为例利用highcharts生成饼图. 饼图通常用在我们需要直观地显示各个部分所占的比例 ...

  9. 生成模型(generative model)与判别模型(discriminative model)的区别

    监督学习可以分为生成方法与判别方法,所学到的模型可以分为生成模型与判别模型. 生成模型 生成模型由数据学习联合概率分布\(P(X,Y)\),然后求出条件概率分布\(P(Y|X)\)作为预测的模型,即生 ...

随机推荐

  1. 几款开源ESB总线的比较

    现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,现在已经是百花争鸣的景象了.现在我就对现有的各种开源ESB总线依据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. CX ...

  2. SearchLookUpEdit

    参考资料: 慧都控件网-DevExpress开发资源 在GridControl控件中使用SearchLookUpEdit构建数据快速输入

  3. golang的ssh包

    git clone https://github.com/golang/crypto.git,复制到 golang.org/x/ 目录下. 常常用来建立ssh连接发送一条命令,但有时需要模拟ssh客户 ...

  4. C#模拟鼠标键盘控制其他窗口(一)

    编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口.比如,操作飞信定时发送短信等.我之前开发过飞信耗子,用的是对飞信协议进行抓包,然后分析协议,进而模拟协议的执行,开发 ...

  5. HDOJ 4652 Dice

      期望DP +数学推导 Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. touch移动触屏滑动事件

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

  7. TypeError: test() got multiple values for keyword argument 'key'

    原因是: 1.函数调用的最终形式只会调用两个函数.一个list参数和一个dict参数,格式为call(func, list, dict); 2.如果传入参数中有key参数,那么首先key参数(包括扩展 ...

  8. python返回值与局部全局变量

    Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright&q ...

  9. 【MySQL】 empty table and delete table.

    1.MySQL生成删除满足条件的表的sql: 1 SELECT 2 CONCAT( 3 'DROP TABLE ', 4 GROUP_CONCAT(table_name), 5 ';' 6 ) AS ...

  10. python——连接MySQL数据库

    都是照着说明文档来的,主要是为了以后忘记了能快一点想起来. 1. 连接 安装MySQL的时候,自动按照了Python的模块,如果没有的话,也可以在官网下载. 看什么都不如看代码来得快: import ...