代码生成工具:CodeSmith 安装、改造适配Mysql 字段注释、DLL修改 及批量生成实体类代码
之前一直使用动软的代码自动生成工具,无奈现在连接数据库时Test Connect 能成功,连接却失败,只能另觅工具了,搜索一翻发现了 CodeSmith,据说一个很好用的工具,因为是个付费版本。
最新版本:8.0,官网下载需注册。
网上版本下载地址含注册机:http://www.drv5.cn/sfinfo/15948.html
1、安装及注册参考:
7.0版本的安装及注册:https://www.cnblogs.com/dunitian/p/4096917.html
8.0版本的安装及注册:https://blog.csdn.net/qq_31384551/article/details/80238656
值得注意的是:注册 7.0的版本 Prefix: 是 CS70P- ; 8.0则是CS80P-
2、连接MySql数据库:
打开数据库列表:
添加数据库:
值得注意的是连接字符串:Server=127.0.0.1;User Id=root;Password=pwd;Database=DbName; 可能成功连接并读取到表;
使用此形式:Data Source=127.0.0.1;port=3306;Initial Catalog=DbName;user id=root;password=pwd; 能成功连接但是读取表列表失败
3、生成实体类代码
新建Entity.cst模板文件,代码参考自网络(不记得哪里抄的了)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | <%@ CodeTemplate Language= "C#" TargetLanguage= "C#" ResponseEncoding= "UTF-8" Debug= "False" Description= "生成数据库实体" %> <%@ Property Name= "SourceTable" Type= "SchemaExplorer.TableSchema" Category= "属性" Description= "要生成实体的数据表" %> <%@ Property Name= "NameSpace" Type= "System.String" Optional= "False" Default= "SketchTouch.Data.Entities" Category= "属性" Description= "实体类所在的命名空间" %> <%@ Property Name= "opuser" Type= "System.String" Default= "Yu-weiz" Optional= "False" Category= "属性" Description= "请输入您的名字" %> <%@ Map Name= "CSharpAlias" Src= "System-CSharpAlias" Description= "System to C# Type Map" %> <%@ Assembly Name= "SchemaExplorer" %> <%@ Import Namespace= "SchemaExplorer" %> /* *本代码由代码生成器自动生成,请不要更改此文件的任何代码。 *生成时间:<%= DateTime.Now.ToLocalTime() %> *生成者:<%= opuser %> */ using System; namespace <%= this .NameSpace %> { ///<summary> ///表<%= this.SourceTable.Name %>的实体类 ///</summary> public class <%= GetClassName() %> { <% foreach (ColumnSchema column in this .SourceTable.Columns){%> <%--生成 get set 方法--%> /// <summary> /// <%= column.Description %> /// </summary> public <%= CSharpAlias[column.SystemType.FullName] %> <%= StringUtil.ToPascalCase(column.Name) %> { get ; set ; } <%}%> } } <script runat= "template" > //得到类的名字(由表名而来) public string GetClassName() { string s= this .SourceTable.Name; //取到表名 //s=s.Replace("st_",""); //判断表名是不是以S结尾,如果是去掉S if (s.EndsWith( "s" )) { s=s.Substring(0,s.Length-1); } return StringUtil.ToPascalCase(s)+ "Entity" ; } </script> |
如下图:
模板中定义的属性在右下角中对应显示与编辑
选择生成的表后,点击Generate按钮即可生成对应表的实体类
4、批量生成
有别于动软的生成工具,界面选择批量生成即可,而是需要编写代码批量生成,这也有一个好处很方便定制。
新建另一模板: Tables.cst
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <%@ Template Language= "C#" TargetLanguage= "C#" %> <%@ Assembly Name= "SchemaExplorer" %> <%@ Import Namespace= "SchemaExplorer" %> <%@ Property Name= "SourceDB" Type= "SchemaExplorer.DatabaseSchema" %> <%@ Register Name= "Entity" Template= "Entity.cst" %> <% foreach (TableSchema table in this .SourceDB.Tables) { Entity mtc= new Entity(); mtc.SourceTable=table; mtc.RenderToFile( "C:\\Projects\\Documents\\" +GetClassName(table)+ ".cs" , true ); } %> <script runat= "template" > //得到类的名字(由表名而来) public string GetClassName(SchemaExplorer.TableSchema table) { string s=table.Name; //取到表名 s=s.Replace( "st_" , "" ); //判断表名是不是以S结尾,如果是去掉S if (s.EndsWith( "s" )) { s=s.Substring(0,s.Length-1); } return StringUtil.ToPascalCase(s)+ "Entity" ; } </script> |
通过注模板以关联批量生成的内容。
同理选取数据库,点击Generate按钮后,对应的代码将生成到对应目录
5、给生成的实体类属性添加注释(MySql)
对于MySql对应的实体类,并没期望出现注释说明,如下图
原因及解决方法,参考:
https://blog.csdn.net/nihaoapengyou/article/details/52587986
网上也有对应的Dll提供,但对8.0无效,但我是我没找到。可能是因为7.0版本软件没有对Dll进行强签名,而8.0开始做了。
怎么办?思路还是跟参考的一样。反编译,修改原码,再重新编译成dll 再替换。但可能是因为做了强签名的原因,替换后程序出错了。所以可能现存网上的Dll也是因为签名的问题出错。
签名,我不大熟悉,只能再次借助工具了:.NET Reflector 和 Reflexil
下载 Reflexil 的Relector版 插件:https://www.softpedia.com/get/Programming/Components-Libraries/Reflexil.shtml
在.NET Reflector 中添加插件
工具栏-->Tools-->Add-Ins
引入解压出来的 Reflexil.Reflector.dll 后,Tools 菜单下面即会出来Reflexil 插件工具
接下来用Reflector 打开Dll
打到需要修改的地方:
然后点击:Tools--->Reflexil 工具
将出现Reflexi工具栏:
又由于我IL语言不怎得,所以决定使用Extra 字段来替换
右键修改查询SQL:
将 EXTRA 修改为 COLUMN_COMMENT
再次修改赋值部份:
将 CS_ColumnExtra 修改为 CS_Description
至此修改完毕,保存DLL
如果你也出现了以下意外:
就去把.NET SDK下的 sn.exe。一般可以在这里找到(C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools) 拷贝到 插件的目录下:
再次保存:
点击 Register it for.. 按钮,保存Dll 。
然后再使用该DLL 覆盖 CodeSmith 的
完成!!!
再次使用CodeSmith 批量生成,注释出来了。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步