手写代码生成器

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

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

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

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

先看下动软代码生成器:

 手写代码生成器                      

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

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

 手写代码生成器

二、连接数据库

 手写代码生成器

三、设定选项进行连接

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

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

 手写代码生成器

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

 手写代码生成器

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

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

 

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

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

 手写代码生成器

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

 手写代码生成器

七、快速try-catch方法

 手写代码生成器

测试连接演示

 手写代码生成器

八、获取数据库中的表

 手写代码生成器

九、将表名绑定代码

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

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

 手写代码生成器

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

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

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

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

用下这个事务: INFORMATION_SCHEMA.COLUMNS.

接下来我就该写代码了.

 手写代码生成器

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

 手写代码生成器

生成model代码演示

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

 手写代码生成器

十二、存储数据的类

 手写代码生成器

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

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

 手写代码生成器

生成model里的属性演示

插入代码位置:

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 1 23 //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 #endregion 54 55 #region 2 56 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 #endregion 83 84 }

相关文章: