using Humanizer;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CodeGenerate
{
class Program
{
static void Main(string[] args)
{
DataTable dt = ExecuteDataTable("select * from information_schema.tables");
foreach (DataRow row in dt.Rows)
{
string tablename = (string)row["TABLE_NAME"]; CreateModel(tablename);
} } private static string connectionString = "server=10.100.3.110,60005;User ID=sa;Password=sa123.com;database=p2p;Enlist=false";
private static string namespaceStr= "LLY.Model.LiCai";
private static string filePath = @"D:\Models";
static string kongge1 = "\t";
static string kongge2 = "\t\t";
static string kongge3 = "\t\t\t";
static string kongge4 = "\t\t\t\t";
StringBuilder SB = new StringBuilder(); #region 把数据库类型转化为.net类型
private static string ToNetType(string dataType)
{
switch (dataType)
{
case "bigint":
return "long?";
case "int":
return "int?";
case "nvarchar":
case "varchar":
case "char":
case "nchar":
return "string";
case "bit":
return "bool?";
case "datetime":
return "DateTime?";
default:
return "object";
}
}
#endregion #region 数据库连接操作
public static DataTable ExecuteDataTable(string cmdText, params SqlParameter[] parameters)
//不能写成static
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
//WhetherCon(txtConnSr.Text);//待优化
/************此处写等待用户输入的代码********************/
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = cmdText;
cmd.Parameters.AddRange(parameters);
DataTable dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
return dt;
}
}
}
#endregion #region 生成Model
/// <summary>
/// 生成Model
/// </summary>
/// <param name="tablename"></param>
private static void CreateModel(string tablename)
{
string className = tablename.Singularize();
DataTable dtCols = ExecuteDataTable("select * from information_schema.columns where table_name=@tablename", new SqlParameter("tablename", tablename));//得到选中的表 DataTable dtColsDesc = ExecuteDataTable("SELECT major_id, minor_id, c.name as Column_Name, value AS extendedProperty "
+ "FROM sys.extended_properties AS ep "
+"INNER JOIN sys.tables AS t ON ep.major_id = t.object_id "
+"INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id "
+ "WHERE class = 1 and t.name =@tablename", new SqlParameter("tablename", tablename));//得到选中的表 StringBuilder sb = new StringBuilder();//用来拼接字符串的对象
sb.AppendLine("using System;");
sb.AppendLine("using System.Collections.Generic;");
sb.AppendLine("using System.Linq;");
sb.AppendLine("using System.Text;");
sb.AppendLine("using LLY.Core.LiCai.Data;");
sb.AppendLine("using System.Threading.Tasks;\r\n");
sb.AppendLine("namespace " + namespaceStr);
sb.AppendLine("{\r\n\r\n");
sb.AppendLine(kongge1 + $"[Serializable]");
sb.AppendLine(kongge1 + $"public class {className} : BaseEntity");
sb.AppendLine(kongge1 + "{\r\n");
foreach (DataRow row in dtCols.Rows)
/*★参数中数据库类型和.net的数据类型之间的转换*/
//遍历每行,得到要用的参数,并赋给其它变量
{
string colName = (string)row["Column_Name"];
string dataType = (string)row["Data_Type"];
string netType = ToNetType(dataType); if(colName=="Id"|| colName == "CreatedAt" || colName == "LastModifiedAt")
{
continue;
} string propDesc = string.Empty;
foreach (DataRow item in dtColsDesc.Rows)
{
string colName1 = (string)item["Column_Name"];
string desc = (string)item["extendedProperty"];
if (colName1 == colName)
{
propDesc = desc;
break;
}
} sb.AppendLine(kongge2 + "/// <summary>");
sb.AppendLine(kongge2 + $"/// {propDesc}");
sb.AppendLine(kongge2 + "/// <summary>");
sb.AppendLine(kongge2 + "public" + " " + netType + " " + colName + "{ get; set; }\r\n"); }
sb.AppendLine(kongge1 + "}"); sb.AppendLine("\r\n\r\n");
sb.AppendLine(kongge1 + $"public class {className}Query : BaseQuery<{className}>");
sb.AppendLine(kongge1 + "{");
sb.AppendLine("\r\n\r\n");
sb.AppendLine(kongge1 + "}"); sb.AppendLine("}");
File.WriteAllText(filePath + @"\" + className + ".cs", sb.ToString());
}
#endregion } }

Model类代码生成器的更多相关文章

  1. 针对Model类的代码修剪器

    直接用Mybatis Generator生成的Model类大概是这样的 package com.spldeolin.demoapp.po; import java.util.Date; import ...

  2. iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值

    在上篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property ...

  3. iOS开发之使用Runtime给Model类赋值

    本篇博客算是给网络缓存打个基础吧,本篇博客先给出简单也是最容易使用的把字典转成实体类的方法,然后在给出如何使用Runtime来给Model实体类赋值.本篇博客会介绍一部分,主要是字典的key与Mode ...

  4. 构建自己的PHP框架--实现Model类(3)

    在之前的博客中,我们实现并完善了Model类的findOne方法,下面我们来实现其中的其他方法. 先来看findAll方法,这个方法和findOne很相似. public static functio ...

  5. 构建自己的PHP框架--实现Model类(1)

    在之前的博客中,我们定义了ORM的接口,以及决定了使用PDO去实现.最后我们提到会有一个Model类实现ModelInterface接口. 现在我们来实现这个接口,如下: <?php names ...

  6. tp框架之Model类与命名空间

    1.获取系统常量信息 public function shuchu() { var_dump(get_defined_constants()); } 2.跨控制器或跨模块调用 function dia ...

  7. 为测试框架model类自动生成xml结果集

    问题:有大量类似于theProductId这样名字的字符串需要转换成the_product_id这种数据库column名的形式. 思路:见到(见)大写字母(缝)就插入(插)一个“_”字符(针)进去,最 ...

  8. C# 类型转换 Dictionary转Model类

    /// <summary> /// 把Model转换为DataRow /// </summary> /// <typeparam name="T"&g ...

  9. iOS开发——model类模板(过滤null和ID)

            说明:model类模板已默认过滤null值,附加特殊情况的关键字ID名的冲突(需手动去掉注释代码).MyMessageModel为示例的名字.可以自己随便起. 1.自己创建一个继承与N ...

随机推荐

  1. MFC:关联变量

    1. 对象(控制)变量(control) a. 数据类型:control 只能创建关联一次 b).    control 用来操控控件 c). 创建 control 变量:控件 -> 右击 -& ...

  2. ASP.NET MVC 企业级实战

    1.泛型 public class List<T>{ } 当定义泛型类的实例时,必须指定这个实例所存储的实际类型,泛型允许程序员将一个实际的数据类型规约延迟至泛型的实例被创建时才确定,泛型 ...

  3. 编写高质量的Python代码系列(八)之部署

    Python提供了一些工具,使我们可以把软件部署到不同的环境中.它也提供了一些模块,令开发者可以把程序编写的更加健壮.本章讲解如何使用Python调试.优化并测试程序,以提升其质量与性能. 第五十四条 ...

  4. ansible安装二进制kubernetes-1.14.1

    主机信息: 主机IP 主机名 角色 10.10.3.181 k8s-m1  kube-apiserver,kube-controller-manager,kube-scheduler,etcd 10. ...

  5. 【sql server】备份集中的数据库与现有数据库不同 解决方案

    #事故现场: 在进行sql server 数据库还原的时候,报错如下: #解决方案: _________________________________________________________ ...

  6. Git复制已有分支到新分支开发

    如果我们需要在现有的分支代码基础上,复制代码到新分支进行开发,并推送至远程仓库,可以进行如下操作: 注:被复制的分支代码(ibis35),创建新的分支(ibis35-dev) 1. 切换到被copy的 ...

  7. Eclipse - 安装lombok后注解无效

    安装 lombok lombok 的安装过程挺简单的,网上已经有很多相关的博客,这里就不在多说了,可以参考这篇:eclipse集成lombok注解不起作用 但是我按照网上的方式安装之后,注解一直不起作 ...

  8. go语言的开始入门(一)

    前言:作为Web开发人员掌握多种后台是必须的,趁自己有C语言的基础,所以尝试入门Golang (一).基本数据类型的认识 小结:int大小默认与系统相关,byte只能够存单字节,   (二).Gola ...

  9. Python认识到放弃

    基础入门 计算机硬件基础 变量 数据类型 基本运算符 变量常量 流程控制 数据类型 数字,字符串,列表 元组,字典,集合 字符编码 python2 python3 文件处理 文件读写 指针移动 函数 ...

  10. Ubuntu屏幕分辨率无1920 1080

    xrandr 没有1920X1080分辨率,所以手动添加一个1080P分辨率,先输入“cvt 1920 1080”命令,查询一下1080P分辨率的有效扫描频率 然后 sudo xrandr --new ...