手写代码生成器
在我们介绍三层的时候,大家是不是发现我们写每一个功能的时候是不是非常的麻烦呢?
像其中的一个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 }