CodeSmith
完美解决CodeSmith无法获取MySQL表及列Description说明注释的方案
问题描述:
CodeSmith是现在比较实用的代码生成器,但是我们发现一个问题:
使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到,也就是column.Description。如图:
我们打开CodeSmith编写一个简单的Model实体类的示例模板如下:
一个简单的CodeSmith生成Model实体的模板
然后我们点击生成,生成的代码如下图:
当然,使用SQL Server及其他数据库都是可以获取到的,这是为什么呢?
逼的没招没招了的时候,果断打开.NET Reflector,看看CodeSmith对SQL Server和MySQL二者,数据表生成操作的时候,有什么不同的地方,或者有什么缺少的地方。
CodeSmith中对MySQL操作的DLL组件位置是:“X:\...\CodeSmith\v7.0\SchemaProviders\SchemaExplorer.MySQLSchemaProvider.dll”
展开后,开始一个个找里面的方法,突然发现一个亮点:“GetTableColumns(string connectionString, TableSchema table);”
这个字面的意思不就是获取列数据么?打开看看。。。可惜,里面只是根据表查询所有列,并没有Description相关操作。
继续找,继续对比。。。最终终于找到问题了:
方法“GetExtendedProperties(string connectionString, SchemaObjectBase schemaObject);”里面的查询语句是:
1
|
string str = string .Format( "SELECT EXTRA, COLUMN_DEFAULT, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}' AND COLUMN_NAME = '{2}'" , schema.Table.Database.Name, schema.Table.Name, schema.Name); |
这个不就是获取Column列中的扩展属性的方法么?!
对比发现,SQL Server的dll里这个方法的下面,有返回Description,而MySQL正好没有!
二话不说,找到CodeSmith的源码包解压,翻出MySQL的项目:“X:\...\CodeSmith\v7.0\Samples\Samples\Projects\CSharp\MySQLSchemaProvider”
然后打开Visual Studio载入"MySQLSchemaProvider.csproj",有很多错误,那是因为缺少了引用,添加CodeSmith\bin里面的相关引用即可。
需要引用的组件你可以在下面两个CodeSmith安装目录中找到:
“X:\...\CodeSmith\v7.0\bin\”、“X:\...\CodeSmith\v7.0\AddIns\”
添加引用之后,错误就全部没了:
然后我们果断开始修改代码、首先找到刚刚那个获取列扩展属性的方法:
“public ExtendedProperty[] GetExtendedProperties(string connectionString, SchemaObjectBase schemaObject)”
然后我们根据观察SQL Server的代码,发现MySQL里面这个方法:
在SQL语句查询的时候少查询了一项数据:“COLUMN_COMMENT”,于是我们首先修改它查询的SQL语句如下:
string commandText = string.Format(@"SELECT EXTRA, COLUMN_DEFAULT, COLUMN_TYPE, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}' AND COLUMN_NAME = '{2}'",
columnSchema.Table.Database.Name, columnSchema.Table.Name, columnSchema.Name);
既然上面查询了,按照正常的数据查询流程,下面应该遍历读取,然后返回吧?
于是继续看,下面有一个while,正是将上面查询出来的数据返回的,我们对比SQL Server的代码发现:
上面查询出来的每一项,下面都有获取返回,而我们刚刚添加的那个“COLUMN_COMMENT”则没有进行数据获取、没有怎么办?加呗~
获取每个数据后,最后统一将封装在“extendedProperties”中,于是我们也将获取到的Description添加进去,其与步骤省略。最终修改的代码如下:
然后我们F6生成一个修改后的dll组件"SchemaExplorer.MySQLSchemaProvider.dll"。
找到默认的dll:“X:\...\CodeSmith\v7.0\SchemaProviders\SchemaExplorer.MySQLSchemaProvider.dll”,替.....不行,还是先备份一下。。。哈哈
然后替换。打开重启CodeSmith,再次生成。。。-_-# 我去!这是在逗我么。
再次回到Visual Studio中仔细看看整个方法,最后发现。。服了。它的这个方法的判断逻辑是:
1 public ExtendedProperty[] GetExtendedProperties(string connectionString, SchemaObjectBase schemaObject)
2
3 {
4
5 List<要返回的东西>......
6
7 if(schemaObject 是一个 ColumnSchema)// 如果是一个列对象
8
9 {
10
11 // 这里面也就是我们刚刚改的,获取列说明部分的代码
12
13 }
14
15 if(schemaObject 是一个 TableSchema)// 完全没有注意下面的这个判断,如果是一个表对象!!!
16
17 {
18
19 // 这里也就是我们下面要动手脚的地方了。
20
21 }
22
23 }
废话不多说。直接上这个方法最终的代码:
重新生成,替换。。。重启CodeSmith,链接MySQL生成。。。。必然果断Ok:
网上当然也有很多例子,不过都是只处理了列的说明,没有处理表的说明。
我这个处理表说明是通过截取已获得的CreateTableScript里面的数据,获取的表说明。
码字不容易,感觉不错的话,请不要忘了点赞哦~(*^_^ *)
公告
搜索
我的标签
- jQuery EasyUI(3)
- WinForms(2)
- CodeSmith(1)
- Graphics(1)
随笔分类
相册
积分与排名
- 积分 - 21468
- 排名 - 8042
最新评论
- 1. Re:拖动无边框窗体
- niubility +10086
- --安度
- 2. Re:汉字转拼音 - 输入汉字获取其拼音
- 学习了
- --安度
- 3. Re:VS插件开发 - 个性化VS IDE编辑器,瞬间 高 大 上
- 不明觉历
- --安度
- 4. Re:VS插件开发 - 个性化VS IDE编辑器,瞬间 高 大 上
- 楼主:能不能把你的主题配色方案发我一份啊,做配色方案太费神了,看的眼花,太多了有些还不知道改哪个好,你那个百度湾畔链接失效了,麻烦邮箱一份,谢谢!292925488@qq.com。我特意注册账号来回复的啊。
- --弹棉花的羊
- 5. Re:WinForms 实现气泡提示窗口
- @@大龙哥
我占击也是没有弹出效果,难道还有其他的地方需求设置 - --larry.fu
【本章来自 孤影'Blog:http://www.cnblogs.com/LonelyShadow,码字不容易,转载请注明出处。】
CodeSmith的更多相关文章
- 完美解决CodeSmith无法获取MySQL表及列Description说明注释的方案
问题描述: CodeSmith是现在比较实用的代码生成器,但是我们发现一个问题: 使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到,也就是column ...
- CodeSmith模板代码生成实战详解
前言 公司项目是基于soa面向服务的架构思想开发的,项目分解众多子项目是必然的.然而子项目的架子结构种类也过多的话,就会对后期的开发维护产生一锅粥的感觉.为了尽可能的在结构层避免出现这种混乱的现象,我 ...
- CodeSmith 介绍
代码生成器作用 中国有句古语叫做“工欲善其事,必先利其器”,用通俗的话来说就是“磨刀不误砍柴功”,古人的这些话告诉我们:要把事情做好,事先应该准备合适的工具.工具不仅仅包括器具, 还包括思想.理论.经 ...
- CodeSmith模板
重复性的工作交给代码生成器就好,这里分享几套模板, 1.从数据库抓取字段,生成Table元素,这个在web开发中很有用 <%-- Name: Author: Description: --%&g ...
- 2015.05.14:codesmith
安装: 安装好codesmith会有两个软件:一个编译器(CodeSmith Generator Explorer),一个生成工具(CodeSmith Generator Studio) 破解: 一般 ...
- CodeSmith Merge策略--小白教程
为了让 自动产生的代码 和 程序员手写的代码 互不干涉, 提出了Merge策略, 包括以下三种 InsertRegion: 只插入(覆盖)到指定 #region区域 InsertClass: ...
- codesmith生成java类
今天生成的时候的时候找不到类型转换的文件JavaAlias 后台发现我装完codesmith后,没有把类型转换类放入对应的文件 把System-JavaTableNameComments.csmap和 ...
- 在Windows7 下调试CodeSmith 注意事项
编写CodeSmith模板和编写程序一样,也需要进行调试,CodeSmith支持使用CLR’s Just-in-Time debugger调试模板. 要调试模板,首先要在CodeTemplate声明中 ...
- 【工具】CodeSmith Generator 7.0.2激活步骤
学过三层的人应该认识CodeSmith Generator吧,今天我就跟大家一起探讨下CodeSmith Generator 7.0.2的激活,这最新版本破解的难度也是超越以往......具体看这篇日 ...
- CodeSmith连接Oracle
Win7上仅安装了Oracle32位客户端,此时CodeSmith无法连接Oracle数据库. 解决方法一:如果同一台电脑安装了Oracle64位数据库,这样CodeSmith可以连接数据库. 解决方 ...
随机推荐
- nginx 提供静态内容
Serving Static Content 提供静态内容 原文地址:http://nginx.com/resources/admin-guide/serving-static-content/ Th ...
- 编写高性能Javascript
编写高性能Javascript 多年来,Javascript一直在web应用开发中占据重要的地位,但是很多开发者往往忽视一些性能方面的知识,特别是随着计算机硬件的不断升级,开发者越发觉得Javascr ...
- 基于docker构建jenkins和svn服务(转)
码农们很定都知道svn的重要性,机器坏掉丢代码的惨痛教训想必很多人都有. jenkins可能很多人都不了解.这是一个持续集成的工具,在敏捷开发领域很流行:跟svn结合可以实现定期build.check ...
- POJ 2329 (暴力+搜索bfs)
Nearest number - 2 Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3943 Accepted: 1210 De ...
- 怎么样eclipse发达国家多重聚合关系maven项目和使用git管理
最近使用的项目的开发maven,多于maven有项目之间有一定的联系,因此,创建一个单独的,然后,maven聚合管理. 项目采用git要管理代码.由于上传的代码集时,.gitignore不要上传文件. ...
- Android高级编程笔记(四)深入探讨Activity(转)
在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一 ...
- Oracle存储过程详解(引用)+补充(转) dbms_output包 good
执行存储过程时,execute和call的区别 EXEC is a sqlplus command that put its argument as an anonymous pl/sql block ...
- Eclipse—怎样为Eclipse开发工具中创建的JavaWebproject创建Servlet
在博客<在Eclipse中怎样创建JavaWebproject>中图文并茂的说明了Eclipse中创建JavaWebproject的方法,本篇博客将告诉大家怎样为Eclipse开发工具中创 ...
- UVA11992 - Fast Matrix Operations(段树部分的变化)
UVA11992 - Fast Matrix Operations(线段树区间改动) 题目链接 题目大意:给你个r*c的矩阵,初始化为0. 然后给你三种操作: 1 x1, y1, x2, y2, v ...
- OpenGL模板 Mac Cmake OpenGL(Glut) Template
自己经常使用的一些功能做一个模板,有灯光效果,你可以用鼠标放大,围绕所述旋转坐标系的原点 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHlhbmcxOT ...