MySQL生成模型
根据数据库表生成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生成模型的更多相关文章
- EF6添加mysql的edmx实体时报错:无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull
EF6.1.3 ,使用mysql5.7的实体数据模型时,提示: 由于出现以下异常,无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中 ...
- EF生成模型出现异常:表“TableDetails“中列“IsPrimaryKey”的值为DBNull解决方法
Entity Framework连接MySQL时:由于出现以下异常,无法生成模型:"表"TableDetails"中列"IsPrimaryKey"的值 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5 从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数 ...
- 生成模型(Generative Model)与判别模型(Discriminative Model)
摘要: 1.定义 2.常见算法 3.特性 4.优缺点 内容: 1.定义 1.1 生成模型: 在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下.它给观测值和标 ...
- 生成模型(Generative)和判别模型(Discriminative)
生成模型(Generative)和判别模型(Discriminative) 引言 最近看文章<A survey of appearance models in visual object ...
- 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...
- HMM 自学教程(二)生成模型
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- highcharts实例教程二:结合php与mysql生成饼图
上回我们分析了用highcharts结合php和mysql生成折线图的实例,这次我们以技术cto网站搜索引擎流量为例利用highcharts生成饼图. 饼图通常用在我们需要直观地显示各个部分所占的比例 ...
- 生成模型(generative model)与判别模型(discriminative model)的区别
监督学习可以分为生成方法与判别方法,所学到的模型可以分为生成模型与判别模型. 生成模型 生成模型由数据学习联合概率分布\(P(X,Y)\),然后求出条件概率分布\(P(Y|X)\)作为预测的模型,即生 ...
随机推荐
- <td valign="center" align="left">
单元格对齐方式:垂直居中,水平居左.
- 获取APP最新版本的接口案例
思路: 开发初期.安卓的应用可能没有上传到应用市场,可以把应用apk放到服务器上,供用户下载.把对应用的版本信息整理成为一个XML文件,放到服务器上,通过接口读取xml文件,获取有版本信息,然后安卓端 ...
- PHP利用P3P实现跨域
本文转自:点这里 有别于JS跨域.IFRAME跨域等的常用处理办法,还可以利用P3P来实现跨域. P3P是什么 P3P(Platform for Privacy Preferences)是W3C公布的 ...
- Ubuntu下su被拒绝
ubuntu@ubuntu:~$ sudo passwd root输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码前提是你肯定得知道当前用户的密码. 然后登录: ...
- TopHat
What is TopHat? TopHat is a program that aligns RNA-Seq reads to a genome in order to identify exon- ...
- javascript创建对象的一些方式
通过创建一个Object实例 var person = new Object(); person.name = "zhouquan"; person.age = 21; perso ...
- 配置SQL server远程连接(局域网)
具体步骤: 1) 2) 3) 4) 5) 6) 7) 最后为了防火墙有影响,直接把防火关了,测试连接通过在来设置防火墙.
- Linux学习之一--VI编辑器的基本使用
vi编辑器是Linux系统下标准的编辑器.而且不逊色于其他任何最新的编辑器.可是会用的有多少呢.下面介绍一下vi编辑器的简单用法和部分命令.让你在Linux系统中畅行无阻. 基本上vi可以分为三种状态 ...
- c# 通过反射调用类的构造函数
var constructors=typeof(Demo).GetConstructors(); var paramsInfos=constructors[i].GetParameters();//I ...
- JsonFormatter PrettyPrint
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...