代码调试心得
一.说明
之前做项目的时候,突然需要用到了视图,所以就想用代码生成器生成Model还有逻辑处理层,因为师兄的代码生成器不可以单个表生成代码,所以之前就在自己本机上用一个临时的数据库使用代码生成器生成代码,很不幸,视图的生成需要原来数据库有相应的表存在,所以自己就觉得去修改一下那个代码生成器。
ps:这篇文章也是很久之前就写了的,一直没有时间整理,现在就大概整理下,虽然还是比较乱。
二.调试过程
但是那个代码生成器自己是没有接触过的,所以只好由生成代码的那个按钮入手,也就是
这个。
根据这些代码:
可以大约知道tableList是需要生成的表的集合,所以接下来就需要观察FillGenItem这个函数究竟做了些什么,经过调试知道:
GillGenItem函数的传入参数是数据库的名字,问题浮出水面了,这里给的参数只有数据库的名字,根本与之前
这些勾选表的操作毫无关系!
三.解决问题主要可以分成两个步骤:
1.首先需要改的就是函数的参数可以满足我们选的参数都包括了:
所以现在参数改为集合
,因为之前的是吧所有的表的名字都搜索出来,所以现在就需要根据方法的这个参数进行筛选,把参数不包含的给去除,所以加入如图的一个for循环
2.勾选的时候,可以获取正确的值,而且好要保证数据库的名字在第一位:
所以就找触发勾选的事件:
可以看到这里只有把数据库加进去全局变量GenerateList,所以我加多了一段
if (node.ToolTipText == "Table")
if (node.Checked)
{
if(!GenerateList.Contains(node.Text))
GenerateList.Add(node.Text);
}
else
{
if (GenerateList.Contains(node.Text))
GenerateList.Remove(node.Text);
}
}
TreeSelect(node);
这样的,把表的名字也加进去,并且吧递归函数放到下面,因为在调试的时候,因为点击checkbox的顺序不一样会造成找到很多表名也不一样,所以加入的
在集合GenerateList不包含的情况下才增加,以及在集合包含的情况下才去除,这样就大大减少了出错的几率
2.2但是还有一件需要解决的是,就是需要把数据库的名字放到第一,那么我如何知道我有勾选了数据库了呢?我自己的答案是在增加一个为string类型的字段,默认为空字符串,在勾选的时候为数据库的时候为DbName字段赋值
所以这样我们就可以知道数据库的名字了,所以现在需要增加一个函数,用于确保数据库的名字在第一位
代码大概就修改到这里了,这样可以完成生成部分表代码了





浙公网安备 33010602011771号