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. win 10 dpi 缩放

    win 10 dpi dwm 效果,影响最大的函数有 参考资料:https://blog.csdn.net/chenlycly/article/details/53142098 GetSystemMe ...

  2. java动态代理源码解析

    众所周知,java动态代理同反射原理一直是许多框架的底层实现,之前一直没有时间来分析动态代理的底层源码,现结合源码分析一下动态代理的底层实现 类和接口 java动态代理的主要类和接口有:java.la ...

  3. SpringBoot注册Windows服务和启动报错的原因

    SpringBoot注册Windows服务和启动报错的原因 Windows系统启动Java程序会弹出黑窗口.黑窗口有几点不好.首先它不美观:其次容易误点导致程序关闭:但最让我匪夷所思的是:将鼠标光标选 ...

  4. MapReduce-CombineTextInputFormat 切片机制

    MapReduce 框架默认的 TextInputFormat 切片机制是对任务按文件规划切片,如果有大量小文件,就会产生大量的 MapTask,处理小文件效率非常低. CombineTextInpu ...

  5. IDEA+Maven+Spring MVC HelloWorld示例

    用Maven创建Web项目 选择webapp模板 创建成功后点Enable Auto-Import idea给我们创建出来的结构是这样的,这还不标准,需要自己修改. 在main文件夹下创建java文件 ...

  6. 通过Hack方式实现SDC中Stage配置联动刷新

    目录 问题描述 如何从外部获取下拉列表参数 如何实现根据下拉列表选项动态刷新 总结 问题描述 最近项目组准备开发一个IoT平台项目,需要使用到StreamSets DataCollector组件进行数 ...

  7. [Luogu P1119]灾后重建

    这是一道考Floyd本质的题. 回忆一下Floyd的原理,三层循环,最外层循环枚举的是中转点,也就是用两点到中转点距离之和来更新最短路.然后来看下题目,重建时间是按照从小到大排序的,也就是说,当第i个 ...

  8. docker部署redis及踩到的坑

    对docker很好奇,玩了一下,部署了一个redis,结果踩了很多坑 任务目的就是在docker中成功部署redis并保证数据持久化到本地,配置也使用本地配置 docker run -p : -v $ ...

  9. day 24-1 继承

    继承 什么是继承: 继承是一种创建新类的方式,在 python 中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 父类必须在子类上面 一个类 可以被多个类继承 一个 ...

  10. axios formData提交数据 && axios设置charset无效???

    但是这样会出现一个问题,什么问题呢? 我设置了请求头编码utf-8,但是没生效 content-type里面没有出现utf-8???????查了很多资料,说这是axios固有的bug,我....... ...