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)

大家都在看

  • Quartus II 13.0 sp1的官方下载页面

    今天为了下个ModelSim跑到网上去找下载资源,清一色的百度网盘,下载速度60k/s,简直有病,于是跑到Intel官网上把连接挖出来了,供各位直接下载 实测使用IDM多线程下载速…

    Linux 2023年6月13日
    0174
  • JavaScript快速入门-08-JSON

    8 JSON 因平时工作时,使用JSON的场景比较多,其JSON语法不再介绍,仅介绍在JavaScript中JSON的解析和序列化。 8.1 JSON 对象 JSON对象有两个方法…

    Linux 2023年6月7日
    0104
  • NoteOfMySQL-07-索引

    1. 索引概述 创建索引的目的是为了优化数据库的查询速度,不添加索引的情况下需要遍历所有数据才能进行删、查、改等操作。 2. 索引存储类型 存储类型 支持的存储引擎 B型树(BTR…

    Linux 2023年6月14日
    087
  • http代理连接

    基于Linux服务器的http代理连接 1. 准备工作 目标服务器 &…

    Linux 2023年6月14日
    080
  • Ubuntu 进程 线程 查看 设置(top taskset)

    top 的基本使用 taskset 的基本使用 top top 详解 及 使用 top 常用的命令 taskset taskset 的基本使用 1. 显示某个进程(线程)运行所在的…

    Linux 2023年6月6日
    0116
  • Docker部署mysql 5.7

    在CentOS或者Linux创建部署目录,用于存放容器的配置和MySQL数据;目的是当重装或者升级容器时,配置文件和数据不会丢失。执行以下命令: a、创建目录: mkdir -p …

    Linux 2023年6月7日
    077
  • Docker如何镜像加速

    原文链接:https://www.zhoubotong.site/post/69.html在使用Docker 下载镜像时,如果不配置镜像加速,下载镜像会比较慢,因为国内从 Dock…

    Linux 2023年6月6日
    0137
  • rpm简单使用

    rpm描述:利用源码包编译成rpm时,会去指定安装好这个包的位置本质:解压,然后拷贝到相关的目录,然后执行脚本 查询所有已经安装过的包 查看安装位置 解压rpm 查看脚本 查看配置…

    Linux 2023年6月7日
    075
  • Linux专项之Apache

    1.虚拟机上网 1.安装软件(httpd) yum search ht…

    Linux 2023年5月27日
    094
  • make

    make 背景 gcc 在编译一个包含多个源文件的工程时, gcc需要将每一个源文件都编译一遍,任何再链接起来形成一个可执行文件。实际上,用户很少对所有源文件都进行修改,这就会造成…

    Linux 2023年6月7日
    0102
  • 三分钟永久激活WebStorm、PHPStorm、PyCharm、IntelliJ IDEA等JetBrains系列IDE

    前言 本文讲解如何永久激活WebStorm、PHPStorm、PyCharm、IntelliJ IDEA等JetBrains系列IDE,亲测有效,操作简单,一次激活,永久有效,一劳…

    Linux 2023年6月7日
    0127
  • VBA中Selection.TypeText长度限制的替代写法

    | 0.06分钟 | 100字符 | 1、引言&背景 2、解决方案 3、声明与参考资料 | SCscHero | 2022/6/5 AM11:34 | 系列 | 已完成 每…

    Linux 2023年6月14日
    097
  • zabbix自定义监控进程和日志

    自定义监控 进程 日志 mysql主从状态 mysql主从延迟 自定义监控 进程 [root@client ~]# cd /usr/local/etc/ [root@client …

    Linux 2023年6月7日
    0157
  • 博客园装饰——(一)置顶菜单栏

    功能描述:当页面向下滚动到菜单栏上边沿触碰到浏览器窗口上边沿时,菜单栏会固定地显示在浏览器窗口上方(贴紧),即达到了置顶菜单栏的效果。而当页面向上滚动到原来的位置时,菜单栏又会自动…

    Linux 2023年6月14日
    0111
  • redis key的过期时间

    设置redis key的生存过期时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) : EXPlRE 命令用于将键key …

    Linux 2023年5月28日
    091
  • Redis无法向磁盘写入RBD数据

    由于客户为了安全规范,规定Redis不能再root权限下运行,所以要进行降权切成普通用户等操作,刚刚做完切权操作。客户监控发出来项目服务的报错邮件,经过查看发现是Redis问题. …

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