随笔 - 46, 文章 - 4, 评论 - 311, 引用 - 18
数据加载中……

代码生成工具随笔(2) ---我的生成工具

目前有很多代码生成工具,很多做得很好,我在上一篇关于代码生成工具的随笔(代码生成工具随笔(1) ---关于代码生成器 )中,大概介绍了一些代码生成工具的现状,也得到很多人的关注。
由于本人很早就在代码生成工具方面有所研究,因此在开发过程中没有使用CodeSmith,MyGeneration子类的生成工具,我觉得很多地方使用这些工具还是很麻烦,按照别人定制模板总是感觉很乏味,没有满足感和成就感,感觉自己掌握生成工具的核心代码总是很好(实际上也是,而且可以很快定制出新的架构代码生成),另外如果自己掌握了数据库的一些信息,还可以作很多事情,不仅仅是一般的代码生成了, 如还可以生成数据库文档,测试数据导入等等的一些。
在实际的开发中,公司很多同事、朋友都提出了很多很好的建议和需求,因此我的代码生成工具也在不断的改进完善中,从开始的一般代码生成,到一个架构完整解决方案的生成, 从开始的控制台程序到整合很多功能Windows Forms 程序,一切都不断的完善中...

本站的代码生成工具已经放在了www.iqidi.com上,可供下载使用

我的C#代码生成工具下载地址:
(个人网站)下载地址:http://www.iqidi.com/Download/Database2SharpSetup.rar
(华军软件)下载地址:http://www.newhua.com/soft/54592.htm
(天空网站)下载地址:http://www.skycn.com/soft/32456.html 
下面截一些图像,对C#代码生成工具进行介绍,希望能够给大家带来更多的信息和帮助。
1。支持NHibernate代码和PetShop架构代码的生成(多种形式).
2。可以查看数据库的信息和实现查询分析器的功能,可以很快地看看数据库的信息哦
3。数据库文档的生成,在模块设计中非常有用,谁想去写描述和字段名称,类型的对应关系呢,笨!
4。测试数据脚本的生成,在外键非常复杂的表中,我们想添加一条记录都是很容易哦,这个可以更加表的外键关系调整插入测试数据的顺序,很周到吧。
5。最新加入了Web界面自动生成功能
6。最新加入了Castle的ActiveRecord代码生成功能

Database2Sharp升级到V3.5版本功能增加或者改进:
1. 增加国际化语言支持(提供中文和英文两种界面)
2. 增加数据库表结构SQL脚本的生成(各种不同的数据库生成不同的SQL脚本),在打开表信息的时候同时在下方生成。
3. 增加Select、Update、Insert和Delete基本语句代码的生成。
4. 增加实体类快速生成的功能,直接在窗体中打开,并用语法高亮显示。
5. 增加可以对表进行选择性生成代码的功能。
6. 增加对MySQL数据库GBK的支持,方便使用中文操作,完好支持MySQL5.0。
7. 改善SQL Analyzer和测试SQL脚本的操作。
8. 改善数据库配置项管理,提供更方便简单的操作。

blog_pic1.jpg 

下面这个是代码生成工具生成的代码,一个解决方案中包括各层所需要的代码哦,另外Petshop架构一、三中生成实体类对应的集合,我们完全可以使用该集合代替ArrayList,而且该集合对象是采用目前最好的实现方式来做的,继承自可以排序的集合类。目前我还没有完成页码代码的生成,下一步工作就是要做这个事情,呵呵。
生成的代码工程 
NHibernate代码主要是生成实体类的代码和HBM文件, 这些类的关系是自动根据您的表关系自动完成的哦,比较智能吧

Web界面代码和后台操作代码等自动生成,你如果开发Web的话,会节省你很多调整界面的时间,加快开发效率


Castle代码目前主要是生成实体类的代码(包含各种ActiveRecord所需要的Attribute), 关系自动生成,模版代码的定制能力更强。
using System;
using System.Collections;
using System.Xml.Serialization;
using Castle.ActiveRecord;

namespace HuaweiSoftware.IPSPBD.Entity
{
    [ActiveRecord("Product")]
    public class ProductInfo : ActiveRecordBase
    {
        #region 成员变量

        private IList m_itemList;        
        private string m_productId;        
        private CategoryInfo m_category;        
        private string m_name;        
        private string m_descn;        

        #endregion

        #region 属性

        [HasMany(typeof(ItemInfo), Table="Item", ColumnKey="ProductId")]
         public virtual IList ItemList
        {
            get
            {
                return this.m_itemList;
            }
            set
            {
                this.m_itemList = value;               
            }
        }

        [PrimaryKey(PrimaryKeyType.Assigned, "ProductId")]
         public virtual string ProductId
        {
            get
            {
                return this.m_productId;
            }
            set
            {
                this.m_productId = value;               
            }
        }

        [BelongsTo("Category")]
         public virtual CategoryInfo Category
        {
            get
            {
                return this.m_category;
            }
            set
            {
                this.m_category = value;               
            }
        }

        [Property("Name")]
         public virtual string Name
        {
            get
            {
                return this.m_name;
            }
            set
            {
                this.m_name = value;               
            }
        }

        [Property("Descn")]
         public virtual string Descn
        {
            get
            {
                return this.m_descn;
            }
            set
            {
                this.m_descn = value;               
            }
        }
        #endregion
       
        #region 静态方法
       
        public static void DeleteAll()
        {
            ActiveRecordBase.DeleteAll(typeof(ProductInfo));
        }
       
        public static ProductInfo[] FindAll()
        {
            return ((ProductInfo[])(ActiveRecordBase.FindAll(typeof(ProductInfo))));
        }
       

         public static ProductInfo Find(string ProductId)
        {
            return ((ProductInfo)(ActiveRecordBase.FindByPrimaryKey(typeof(ProductInfo), ProductId)));
        }
    
       
        #endregion

    }
}

主要研究技术:代码生成工具、Visio二次开发
    
    转载请注明出处:
撰写人:伍华聪  http:
//www.iqidi.com 
    

posted on 2006-09-26 00:12 伍华聪 阅读(4401) 评论(45)  编辑 收藏

评论

#1楼    回复  引用    

下来试了一下,的确强大,支持楼主,楼主辛苦了
2006-09-26 09:03 | 新东 [未注册用户]

#2楼    回复  引用    

开源不?
2006-09-26 09:13 | Riancy [未注册用户]

#3楼    回复  引用    

跟本就连不上数据库!

#4楼    回复  引用  查看    

关键是还要注册。。???

这算不算广告??



2006-09-26 09:23 | junmy      

#5楼    回复  引用    

楼主,可不可以发一两个实例关于上面使用NHibernate的列子呀!
我的邮箱是:gj7722064@163.com
2006-09-26 09:25 | gj [未注册用户]

#6楼    回复  引用    

zhiqu kaiyuan
2006-09-26 09:42 | huangelite [未注册用户]

#7楼    回复  引用    

下载看了下,功能很不错!
我测试了下你的MYSQL部分,出现了些问题!
------------------
这是我随便建立的一个测试数据库
这是DDL
CREATE TABLE `mytest` (
`AutoId` int(11) NOT NULL,
`Name` varchar(50) default NULL,
`Password` varchar(50) default NULL,
PRIMARY KEY (`AutoId`),
UNIQUE KEY `Password` (`Password`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
我使用工具生成代码的时候,无论是PETSHOP还是Nhibernate都不能生成代码,而且立即打开解决方案!不知道是我的系统问题还是我的数据库问题。后来我只有用一个能够完整使用的数据库才可以生成代码。

我又看了下能够生成代码的,(我采用的是架构3生成)发现些疑问。
在IDAL里的SQLHELPER,里面采用的是SqlClient,而不是MySqlClient.
而PageHelper也是同样。这么样能操作数据库吗?DALDatabase里的BaseDAL也是这么样。我快速看了下,都好像没有看到使用MySqlClient,由于我没有看到你的DATAACCESS访问层到底是怎么样的。具体不是很清楚。可能你在里面封装了吧!由于上班,没有时间具体使用代码测试。
-------------------
这是我初次的使用过程中遇到的一些问题,可能是我的水平问题。不过LZ的代码生成工具确实比较强大。

#8楼 [楼主]   回复  引用  查看    

由于时间的关系, 目前对SqlServer的支持比较好, 我也一直使用SqlServer进行项目的代码生成工作, 不过MSAccess/MySql目前只可以看数据库的架构信息, 有时间我会把这些功能加上(主要大家可能很少使用这些数据库来做开发) ,Oracle方面实现基本已经做好了, 不过就是测试环境还没有, 因此暂时没有做这些工作, 以后一定会把他加上去.

希望目前大家使用来做MS SQLserver2000来做开发吧, 其他的逐渐支持!
非常感谢fds2003的意见
2006-09-26 11:57 | 伍华聪      

#9楼    回复  引用  查看    

不能生成一对多的关系?
2006-09-26 12:21 | superstar      

#10楼    回复  引用    

希望LZ能早日完成!:)

#11楼    回复  引用  查看    

对petshop路线对表查询一直有困惑,仿佛没有能生成多表查询的生成器,楼主在这方面有什么见解吗?请赐教:)
2006-09-26 14:50 | 老刘.      

#12楼    回复  引用    

看了一下,很多功能还是不错的,但是操作性就不太好。特别是数据库连接管理的界面实在是太简单了,操作也不方便。导出代码没看到预览功能。这样工具还要注册,15天试用,显得有些哪个... 看了一下就 delete 掉了

现在也是自动代码生成器泛滥的年代,我是个懒人,平时经常用CodeSmith , 前些时用了用 csdn 上面李天平的 Maticsoft.Net代码自动生成器 虽然功能不多,个人觉得他的界面和操作性很不错。

最后希望楼主工具越做越好,好象我这样的懒人开发起来越来越轻松.
2006-09-26 15:19 | 懒人.net [未注册用户]

#13楼    回复  引用    

老实说,跟我的那个生成器比,还差很远。

#14楼 [楼主]   回复  引用  查看    

对个人用户开发随时可以提供注册码.
关于PetShop中的多表关系, 我主要使用两种方式处理, 一种在业务层组装关联的对象实体(见架构一); 一种是通过函数方式获取关联的数据(见架构二);
2006-09-26 16:52 | 伍华聪      

#15楼    回复  引用  查看    

用 CodeAuto 吧,个人免费,有源代码,可以非常简单的自己写模板:
http://www.macrobject.com/cn/codeauto/index.htm
2006-09-26 20:03 | Wisdom-zh      

#16楼    回复  引用    

支持楼主.历害.东西确实不错.
2006-10-16 14:20 | 金谷软件 [未注册用户]

#17楼    回复  引用    

进一步完善Nhibernate代码的生成, 添加了Oracle数据库的支持, 别名修改功能进一步在完善当中,欢迎提出更好的意见

#18楼 [楼主]   回复  引用  查看    

完善了Oracle的开发支持, 添加了数据表字段别名修改功能,调整了查询分析器的界面等功能, 希望试用并提出您宝贵的意见
2006-11-22 12:03 | 伍华聪      

#19楼 [楼主]   回复  引用  查看    

增加Web界面代码自动生成的功能, 增加数据库表别名修改功能, 完善了NHibernate的代码生成, 完善其他方面界面操作.
2006-12-27 09:47 | 伍华聪      

#20楼 [楼主]   回复  引用  查看    

5。最新加入了Web界面自动生成功能
6。最新加入了Castle的ActiveRecord代码生成功能
2007-01-03 20:53 | 伍华聪      

#21楼    回复  引用    

伍华聪 :你好,我想学习一下这个工具,能否给我一个注册码,谢谢!
我的邮箱:sunzhe1102@163.com
再次感谢!
2007-01-16 16:21 | polo [未注册用户]

#22楼    回复  引用    

怎么搞的生成有问题
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[NullReferenceException: 未将对象引用设置到对象的实例。]
HuaweiSoftware.Common.WebPager.Pager.get_TotalRecords() +26
HuaweiSoftware.Common.WebPager.Pager.OnLoad(EventArgs e) +378
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain()



2007-01-24 14:18 | 吕幸 [未注册用户]

#23楼 [楼主]   回复  引用  查看    

请检查你生成的Web代码中, Webpage对象的数据库连接或者语句是否正确,一般是这个问题导致的。
2007-01-24 16:32 | 伍华聪      

#24楼    回复  引用    

现在开源的工具很多,楼主还搞个注册的,唉。。。
2007-01-24 20:19 | CHINA_CSDNER [未注册用户]

#25楼    回复  引用    

很不错,



应该搞开原的

并且大方向错了
2007-01-31 18:08 | zlong [未注册用户]

#26楼    回复  引用    

首先,楼主幸苦了。
其次,我没用,因为看到要注册,我一般用开源和带绿的,嘿嘿。希望楼主再接再厉,db2 用的人也较多咧。
最后,拜拜,呵呵
2007-02-04 00:52 | 陈轶涛 [未注册用户]

#27楼    回复  引用    

能不能个人用免费,企业用才收费啊。
2007-03-09 18:03 | p [未注册用户]

#28楼    回复  引用    

华微的兄弟们可能都不记得我啦。
03年年底在华微混过一段时间,
江记S、姜会Z
还有个组员中文名记不起来了,Ben.Tan
这些老将都还在吗??

hedylin@163.com
2007-04-11 10:20 | 逆风飞扬 [未注册用户]

#29楼    回复  引用  查看    

多谢楼主的努力,可以给个注册码我呢?
gaoming-wu@163.com
谢谢
2007-04-25 10:51 | Kevin Wu      

#30楼    回复  引用    

你什么时候能加上支持存储过程的实体生成的功能哦,期待着....同时隆重推出mygenerate,可以自己定义模版,用起来真是太爽了.
2007-04-27 15:12 | tancky [未注册用户]

#31楼    回复  引用  查看    

生成正常,但是注释都变成了乱码,不知有何解决方案没?
2007-06-27 09:47 | 猪老板      

#32楼    回复  引用    

用VS2005打开,中文成乱码
解决办法:工具选项文件编辑器常规:
自动检测不带UTF-8编码打勾
2007-06-27 13:18 | 伍华聪 [未注册用户]

#33楼    回复  引用  查看    

试了一下,不支持Windows验证连接,晕。有空看看我的吧: http://www.cnblogs.com/mrhgw/archive/2007/06/25/795417.html
2007-10-10 21:11 | 有容乃大      

#34楼 [楼主]   回复  引用  查看    

本站的代码生成工具已经放在了www.iqidi.com上,可供下载使用
2007-11-19 14:48 | 伍华聪      

#35楼    回复  引用    

已经放在了www.iqidi.com上?
2007-11-23 16:49 | 物资回收 [未注册用户]

#36楼    回复  引用    

说的很好,不错。。
2007-11-23 16:49 | 大家了 [未注册用户]

#37楼    回复  引用  查看    

很好 功能强大
2007-12-10 18:21 | 高海东      

#38楼    回复  引用    

生成两张有关系表时.. 那个自动获取列表值怎么写??
2008-04-24 14:50 | Mr 任 [未注册用户]

#39楼    回复  引用    

为什么我生成的web方案总是有编码问题呀。

customerID.DefaultValue = new ListItem[] {new ListItem("璇疯嚜琛岃幏鍙栧垪琛ㄧ殑鍊?)};
FieldInfo employeeID = new FieldInfo("EmployeeID", "EmployeeID", FieldType.String);
employeeID.DefaultValue = new ListItem[] {new ListItem("璇疯嚜琛岃幏鍙栧垪琛ㄧ殑鍊?)};
2008-05-28 22:14 | 柳永法 [未注册用户]

#40楼    回复  引用  查看    

难道都没有楼上这种情况?
2008-05-29 23:28 | yongfa365      

#41楼    回复  引用  查看    

连接失败:Character set 'gbk' is not supported。。
什么意思呢??
2008-06-02 11:10 | 时间太快      

#42楼 [楼主]   回复  引用  查看    

@时间太快
你可能使用的是MySql的低版本,他们对GBK的支持有问题的,你使用Mysq5的在做中文字段的话,就没有问题了
2008-06-02 12:15 | 伍华聪      

#43楼    回复  引用  查看    

@伍华聪
我用你的那个DataBase2sharp工具 生成PetShop框架,发现是用1.0的,打开后还需要转换到2.0.且转换后,所有的项目的关联文件都默认到\xx.cs目录下,导致项目显示文件不存在 。。。
2008-06-02 12:54 | 时间太快      

#44楼 [楼主]   回复  引用  查看    

@时间太快
好的,我会马上修改为C#2.0的,以前有用户提出来,一直忘记这件事情了,呵呵,一周内搞定
2008-06-02 16:21 | 伍华聪      

#45楼 [楼主]   回复  引用  查看    

已经完整支持.NET2.0, Visual Studio 2005的格式,并可以顺利升级到VS2008上。
同时完善了很多其他功能
2008-06-30 13:13 | 伍华聪      

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-30 17:59 编辑过
 
另存  打印