代码生成工具: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数据库:

打开数据库列表:

扫描二维码关注公众号,回复: 3183906 查看本文章

 添加数据库:

值得注意的是连接字符串: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模板文件,代码参考自网络(不记得哪里抄的了)

<%@ 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

<%@ 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 批量生成,注释出来了。

 

附:修改后的 SchemaExplorer.MySQLSchemaProvider.dll

猜你喜欢

转载自www.cnblogs.com/Yu-weiz/p/9645242.html
今日推荐