CodeSmith无法获取MySQL表及列Description说明处理

实体类生成模板下载:

链接:https://pan.baidu.com/s/1tLxW5m5ECwVV2feWSVtQIA
提取码:qezw

反编译工具下载:

链接:https://pan.baidu.com/s/19dG4NweQodLl0yG5XQrcOg
提取码:r793

一、使用反编译工具dnSpy打开D:\software\generator71(1)\generator-71\SchemaProviders\SchemaExplorer.MySQLSchemaProvider.dll

二、找到MySQLSchemaProvider类

CodeSmith无法获取MySQL表及列Description说明处理

三、找到GetExtendedProperties方法名,使用反编译工具编辑该类,替换GetExtendedProperties的代码逻辑并进行保存

public ExtendedProperty[] GetExtendedProperties(string connectionString, SchemaObjectBase schemaObject)
        {
            List list = new List();
            if (schemaObject is ColumnSchema)
            {
                ColumnSchema columnSchema = schemaObject as ColumnSchema;
                string commandText = string.Format("SELECT EXTRA, COLUMN_DEFAULT, COLUMN_TYPE, COLUMN_COMMENT\r\n                                                        FROM INFORMATION_SCHEMA.COLUMNS\r\n                                                        WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}' AND COLUMN_NAME = '{2}'", columnSchema.Table.Database.Name, columnSchema.Table.Name, columnSchema.Name);
                using (DbConnection dbConnection = MySQLSchemaProvider.CreateConnection(connectionString))
                {
                    dbConnection.Open();
                    DbCommand dbCommand = dbConnection.CreateCommand();
                    dbCommand.CommandText = commandText;
                    dbCommand.Connection = dbConnection;
                    using (IDataReader dataReader = dbCommand.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dataReader.Read())
                        {
                            string text = dataReader.GetString(0).ToLower();
                            bool flag = dataReader.IsDBNull(1);
                            string value = "";
                            if (!flag)
                            {
                                value = dataReader.GetString(1).ToUpper();
                            }
                            string value2 = dataReader.GetString(2).ToUpper();
                            string @string = dataReader.GetString(3);
                            bool flag2 = text.IndexOf("auto_increment") > -1;
                            list.Add(new ExtendedProperty("CS_IsIdentity", flag2, columnSchema.DataType));
                            if (flag2)
                            {
                                list.Add(new ExtendedProperty("CS_IdentitySeed", 1, columnSchema.DataType));
                                list.Add(new ExtendedProperty("CS_IdentityIncrement", 1, columnSchema.DataType));
                            }
                            list.Add(new ExtendedProperty("CS_ColumnDefaultIsNull", flag, DbType.Boolean));
                            list.Add(new ExtendedProperty("CS_Default", value, DbType.String));
                            list.Add(new ExtendedProperty("CS_ColumnDefault", value, DbType.String));
                            list.Add(new ExtendedProperty("CS_SystemType", value2, DbType.String));
                            list.Add(new ExtendedProperty("CS_ColumnType", value2, DbType.String));
                            list.Add(new ExtendedProperty("CS_ColumnExtra", text.ToUpper(), DbType.String));
                            list.Add(new ExtendedProperty("CS_Description", @string, DbType.String));
                        }
                        if (!dataReader.IsClosed)
                        {
                            dataReader.Close();
                        }
                    }
                    if (dbConnection.State != ConnectionState.Closed)
                    {
                        dbConnection.Close();
                    }
                }
            }
            if (schemaObject is TableSchema)
            {
                TableSchema tableSchema = schemaObject as TableSchema;
                string commandText2 = string.Format("SHOW CREATE TABLE {0}.{1}", tableSchema.Database.Name, tableSchema.Name);
                using (DbConnection dbConnection2 = MySQLSchemaProvider.CreateConnection(connectionString))
                {
                    dbConnection2.Open();
                    DbCommand dbCommand2 = dbConnection2.CreateCommand();
                    dbCommand2.CommandText = commandText2;
                    dbCommand2.Connection = dbConnection2;
                    using (IDataReader dataReader2 = dbCommand2.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dataReader2.Read())
                        {
                            string string2 = dataReader2.GetString(1);
                            list.Add(new ExtendedProperty("TS_Description", string2, DbType.String));
                            int num = string2.LastIndexOf("ENGINE");
                            int num2 = string2.LastIndexOf("COMMENT=");
                            string value3 = dataReader2.GetString(0);
                            if (num2 > num)
                            {
                                value3 = string2.Substring(num2 + 9).Replace("'", "");
                            }
                            list.Add(new ExtendedProperty("CS_Description", value3, DbType.String));
                        }
                        if (!dataReader2.IsClosed)
                        {
                            dataReader2.Close();
                        }
                    }
                    if (dbConnection2.State != ConnectionState.Closed)
                    {
                        dbConnection2.Close();
                    }
                }
            }
            return list.ToArray();
        }

四、生成效果

CodeSmith无法获取MySQL表及列Description说明处理

Original: https://www.cnblogs.com/sportsky/p/16722007.html
Author: SportSky
Title: CodeSmith无法获取MySQL表及列Description说明处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609220/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JavaScript快速入门-04-运算符

    4 运算符 4.1 算术运算符 4.1.1 概述 JavaScript 提供的算术运算符如下所示: 类型 符号 示例 加法运算符 + a+b 减法运算符 – a-b 乘…

    Linux 2023年6月7日
    079
  • CentOS 8 上安装和配置 nginx

    1、检查yum上的nginx版本 yum info nginx 2、安装nginx yum install nginx 3、将服务设置为每次开机启动 sudo systemctl …

    Linux 2023年5月27日
    0128
  • 性能测试—实施流程记录

    posted @2022-06-08 17:31 尼古丁·瘾 阅读(26 ) 评论() 编辑 Original: https://www.cnblogs.com/ngd-mzl/p…

    Linux 2023年6月8日
    0124
  • 解决Ubuntu(20.04)和Windows10双系统时间不同步问题

    1. 原因分析 出现这种情况的原因是 Windows 和 Ubuntu它们在默认情况下看待硬件时间(主板上的BOIS显示的时间)的方式 不一样。 我们先来看看时间的概念: [En]…

    Linux 2023年5月27日
    0202
  • 操作系统实战45讲-10 设置工作模式与环境:建立计算机

    实验环境: 虚拟机软件:VMware® Workstation 16 Pro虚拟机:Ubuntu 20.04 生产虚拟硬盘 用 dd 命令(用指定大小的块拷贝一个文件,并在拷贝的同…

    Linux 2023年6月7日
    0129
  • Linux服务器配置git服务

    现在 Github 已经支持个人建立私有仓库,包括国内的一些开源平台如 Gitee 等也支持私有仓库,所以直接去建立私有仓库即可。或者可以自己买服务器搭建 GitLab。但是这篇文…

    Linux 2023年6月14日
    0112
  • 测试计划

    ​ 1.测试计划的定义:描述需要完成的所有工作,包括被测项目的目的、背景、范围、资源、进度、环境、任务、策略,以及相应的风险和措施。 ​ 2.测试计划的作用: 对后面的测试过程起到…

    Linux 2023年6月7日
    082
  • 企业DevOps之路:jenkins 搭建

    安装 jdk8.0 下载jdk8.0 https://ftp-new-pc.pconline.com.cn/pub/download/201903/pconline15521980…

    Linux 2023年5月27日
    0112
  • 2021年3月-第01阶段-Linux基础-Linux系统的启动流程

    Linux系统的启动流程 理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进而解决问题。 上图为Linux操作系统启动流程 1….

    Linux 2023年5月27日
    0129
  • KVM虚拟化

    1. 虚拟化介绍 2. 为什么要使用虚拟化技术 3. KVM介绍 4. KVM部署 4.1.开启CPU的虚拟化功能,添加一块新的硬盘用来存储kvm的数据 4.2. 安装kvm 4….

    Linux 2023年6月13日
    0128
  • CentOS.7下安装配置FTP和SFTP服务

    一: FTP Centos7中默认已经安装了sshd服务(sftp), vsftpd需要手动安装 1、安装并启动FTP服务 1.1 安装vsftp d 使用 yum 安装 vsft…

    Linux 2023年6月6日
    0143
  • rocketmq高可用集群部署(RocketMQ-on-DLedger Group)

    编辑broker的配置文件 第一台主机node0的配置(192.168.0.218): vim ./conf/dledger/broker-n0.conf 内容如下: broker…

    Linux 2023年6月8日
    0111
  • VIM快捷键全集

    VIM快捷键大法 vim是我最喜欢的编辑器,也是linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效。 如果是初学vi…

    Linux 2023年6月7日
    0111
  • 数字证书工作原理 图文并茂

    SSL证书和HTTPS的关系 HTTPS在HTTP的基础上加入了SSL加密协议,HTTP是明文传输,HTTPS是加密传输。 A quick definition:HTTPS sta…

    Linux 2023年6月6日
    0123
  • Linux系统编程 —线程同步概念

    同步概念 同步,指对在一个系统中所发生的事件之间进行协调,在时间上出现一致性与统一化的现象。 但是,对于不同行业,对于同步的理解略有不同。比如:设备同步,是指在两个设备之间规定一个…

    Linux 2023年6月14日
    0104
  • Ubuntu报Command ‘firewall-cmd’ not found, but can be installed with: apt install firewalld错误解决方案

    当输入 firewall-cmd –list-ports 查看端口信息时报错 报错的原因可能是没有安装firewall,安装命令为: yum install firewalld …

    Linux 2023年6月7日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球