博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手写代码生成器
阅读量:6260 次
发布时间:2019-06-22

本文共 6967 字,大约阅读时间需要 23 分钟。

手写代码生成器

在我们介绍三层的时候,大家是不是发现我们写每一个功能的时候是不是非常的麻烦呢?

像其中的一个model,如果属性特别多的时候,写起来非常的慢。

像其中一些基本的功能我们可以使用代码生成器,然后在此基础上改下就好了。

但是:一定要一开始手写三层,不要依赖于代码生成器,等手写熟练了以后再用代码生成器。

先看下动软代码生成器:

                       

一、动软代码生成器的安装

下面我演示一下如何使用:

 

二、连接数据库

 

三、设定选项进行连接

在加载数据库的时候出现: “添加服务器配置失败,请检查是否有写入权限或文件是否存在”的错误的解决办法.

找到安装动软的目录,如果装在C盘时,默认为C:\Program Files\Maticsoft\Codematic2,给此文件夹的安全属性中当前用户添加全部权限;或添加Everyone用户,给Everyone角色添加全部权限。

 

四、选定数据库-加载所有表

 

五、使用代码生成器生成三层

为了理解代码生成器的原理,我们写个简单生成model的代码生成器。

 

用户可能会连接各种各样的数据库,连接字符串不能写死.让用户选择或者是自己输入也行.

为了方便,我在文本框里面写好连接的字符串.

 

六、画好界面,写好连接字符串

 

七、快速try-catch方法

 

测试连接演示

 

八、获取数据库中的表

 

九、将表名绑定代码

接下来我们完成,点击一个表名一点按钮,生成一个model。

让用户指定下命名空间,类名跟表名一样就行了。

 

十、画好接下来用到的界面

当我点生成的时候,就开始生成代码了.大家思考下,当我点生成的时候执行什么代码.

首先,获取现在的表.生成代码例如像model中的很多代码是固定的.拼个字符串就行了.

接下来的问题是,这张表中有多少个列.怎么获取表中有多少个列呢?

用下这个事务: INFORMATION_SCHEMA.COLUMNS.

接下来我就该写代码了.

 

十一、生成model代码框架代码

 

生成model代码演示

接下来我们改写model里面属性的代码了。

 

十二、存储数据的类

 

十三、生成model里的属性代码的代码

下面请大家思考下,怎样才能判断数据类型,进而使之转换。

 

生成model里的属性演示

插入代码位置:

View Code
1                //4.循环遍历listColumns(列集合) 2                 foreach (ColumnInfo item in listColumns) 3                 { 4                     //注:这里我写的是自动属性的,先写字段,再写属性也行。 5                     //问题1是数据类型是数据库中的,不是C#中的。2是属性名应该大写-所以下面封装了方法,处理这个。 6                     sbCode.AppendLine("public string " + CheckDbType(item) + " " + ChangePropertyName(item.ColumnName)); 7                     sbCode.AppendLine("{ "); 8                     sbCode.AppendLine("get;"); 9                     sbCode.AppendLine("set;");10                     sbCode.AppendLine("}");11                 }12 13 14                 sbCode.AppendLine("}");15                 sbCode.AppendLine("}");16                 txtCode.Text = sbCode.ToString();17             }18 19         }20         private string CheckDbType(ColumnInfo p)21         {22             #region 123             //1.判断是不是值类型24             //2.判断是不是为空25             //3.把nverchar转换成string类型26             //下面这么写不太合适27             //string dbType = string.Empty;28             //switch (p.DataType.ToLower())29             //{30             //    case "char":31             //    case "varchar":32             //    case "nchar":33             //    case "nvarchar":34             //    case "text":35             //    case "ntext":36             //        dbType = "string";37             //        break;38             //    case "int":39             //        dbType = "int";40             //        break;41             //    case "bit":42             //        dbType = "bool";43             //        break;44             //    default:45             //        dbType = "unknow";46             //        break;47             //}48             //if (p.IsNullable.ToLower() == "yes")49             //{50             //    dbType += "?";51             //}52             //return dbType;53             #endregion54 55             #region 256             Type dbType = null;57             switch (p.DataType.ToLower())58             {59                 case "char":60                 case "varchar":61                 case "nchar":62                 case "nvarchar":63                 case "text":64                 case "ntext":65                     dbType = typeof(string);66                     break;67                 case "int":68                     dbType = typeof(int);69                     break;70                 case "bit":71                     dbType = typeof(bool);72                     break;73             }74             if (dbType!=null)75             {76                 if (dbType.IsValueType && p.IsNullable.ToLower ()=="yes")77                 {78                     return dbType.ToString() + "?";  79                 }80             }81             return dbType.ToString();82             #endregion83             84         }

十四、mygeneration

下面为大家介绍CodeSmith代码生成器。

 

十五、CodeSmith安装过程

CodeSmith的好处就是自己可以写模板。

下面我们自己写个模板

 

十六、新建模板

双击打开

 

十七、在模板中哪能写C#代码

 

十八、生成,执行

接下来,我写个标志并且输出。

 

十九、第一个需要说明的地方

 

二十、发件人,收件人改成方法替代

像这种情况,如果我要改发件人,收件人得话,比较的麻烦。所以,不光要有方法,我在里面添加几个参数。

 

二十一、添加参数

 

二十二、设置参数

写完以后编译一下,软件右下角就是刚写的三个参数。

 

二十三、又下角显示出刚设定的三个参数

接下来看下怎么用这三个参数。

 

二十四、参数的用法一

 

二十五、改变参数以后,输出的内容页变了

模板的意义:写一些固定的字符串,不固定的字符串可以用方法和参数来代替,这就是模板的意义。

 

二十六、第一句话的解释

在安装CodeSmith代码生成器的过程中可能会遇到些小问题,本人在这提供我安装好的,大家直接在自己的电脑上进行安装就行了。

 

二十七、CodeSmith代码生成器安装过程

 

二十八、写好的模板

接下来我们自己写模板生成一个model。

生成model模板需要一个命名空间,需要一个表。这两个设定成参数。

 

二十九、model的参数设定

添加数据库

 

三十、给参数表设定值的步骤

接下来生成实体model

 

三十一、生成实体model

 

三十二、让属性名变成大写的方法

修改数据类型用我们现成的方法:

插入代码位置:

View Code
1 public string GetCSharpTypeFromDBFieldType(ColumnSchema column) 2     { 3                 string type; 4         switch (column.DataType) 5         { 6             case DbType.AnsiString: type= "string";break; 7             case DbType.AnsiStringFixedLength: type= "string";break; 8             case DbType.Binary: type= "byte[]";break; 9             case DbType.Boolean: type= "bool";break;10             case DbType.Byte: type= "byte";break;11             case DbType.Currency: type= "decimal";break;12             case DbType.Date: type= "DateTime";break;13             case DbType.DateTime: type= "DateTime";break;14             case DbType.Decimal: type= "decimal";break;15             case DbType.Double: type= "double";break;16             case DbType.Guid: type= "Guid";break;17             case DbType.Int16: type= "short";break;18             case DbType.Int32: type= "int";break;19             case DbType.Int64: type= "long";break;20             case DbType.Object: type= "object";break;21             case DbType.SByte: type= "sbyte";break;22             case DbType.Single: type= "float";break;23             case DbType.String: type= "string";break;24             case DbType.StringFixedLength: type= "string";break;25             case DbType.Time: type= "TimeSpan";break;26             case DbType.UInt16: type= "ushort";break;27             case DbType.UInt32: type= "uint";break;28             case DbType.UInt64: type= "ulong";break;29             case DbType.VarNumeric: type= "decimal";break;30             default:31             {32                 type= "__UNKNOWN__" + column.NativeType;33                 break;34             }35         }36         if(column.AllowDBNull&&37             column.SystemType.IsValueType)38         {39             type=type+"?";40         }41         return type;42     }

三十三、修改数据类型的方法:

这里我们提供给大家已经写好的模板:

 

三十四、添加写好的模板

 

三十五、看下我们写好的model模板

三十六、三层中模板的应用

 

三十七、为模板添加作者签名

 

三十八、处理bll层生成在指定文件夹的解决办法

下面我们把sqlhelper也继承到主模板里面。

 

三十九、了解清晰主模板相关信息

好了解清楚这些,再把sqlhelper继承进来就相当的容易了。

 

四十、把sqlhelper继承进主模板

 

四十一、加载到项目里面

接下来再说一个问题

比如说我生成好的bLL文件

我还需要在里面加东西,我辛辛苦苦加了很多个方法在里面。同时,我又发现代码生成器里面有个地方不完美,稍微修改了下模板。重新生成以后,发现我上午加的代码没有了。

也就是说通过代码生成器生成的代码,跟我们手动写的代码应该分开来存储。

在同一个命名空间下,类名一样的,加partial部分类。编译的时候,自动编译成一个类来运行。

注意文件名不能重名。

 

四十二、partial关键字的用法

代码生成器生成的代码都含有partial关键字,如果我们想扩展的话,我们写在自己拓展的partial 类里面。

一般情况下代码生成器生成的代码不需要做任何的改动。如果觉得改动比较的大,不如去改下模板,重新生成一下。

 发送邮件程序涵很多邪恶的东西,就先不发了。。。

作者近期文章列表:

C#基础教程(完全免费,献给代码爱好者的最好礼物。注:本作者分享自己精心整理的C#基础教程,无任何商业目的。
希望与更多的代码爱好者交流心得,也请高手多多指点!!!)
三层及其它内容
SQL数据库 ADO.net
面向过程,面向对象中高级
winform基础
面向过程
面向对象
GDI+
HTML概述以及CSS
JavaScript基础
jQuery

 

转载地址:http://xrqsa.baihongyu.com/

你可能感兴趣的文章
【BZOJ】2563: 阿狸和桃子的游戏
查看>>
redis 中文字符显示
查看>>
顺序图【6】--☆☆
查看>>
Docker Swarm 让你事半功倍
查看>>
javaScript事件(四)event的公共成员(属性和方法)
查看>>
An easy to use android color picker library
查看>>
Oracle SID爆破工具SidGuess
查看>>
批处理常用命令总结2
查看>>
Android -- 自定义View小Demo,绘制钟表时间(一)
查看>>
信息检索Reading List
查看>>
自动精简配置&重复数据删除核心技术点及其经济效应探究
查看>>
cncert网络安全周报35期 境内被植入后门的政府网站112个 环比上涨24.4%
查看>>
物联网到底是不是泡沫,且看英特尔交出的答案
查看>>
IPv6太落后了:中国加速服务器援建
查看>>
物理引擎中velocity的单位是个什么鬼?
查看>>
oracle的drop命令
查看>>
设计与梳理企业二级流程的路线方法
查看>>
垃圾回收概念与算法
查看>>
TFS实现需求工作项自动级联保存
查看>>
springmvc 4.x 处理json 数据时中文乱码
查看>>