代码生成工具随笔(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代码生成功能
2. 增加数据库表结构SQL脚本的生成(各种不同的数据库生成不同的SQL脚本),在打开表信息的时候同时在下方生成。
3. 增加Select、Update、Insert和Delete基本语句代码的生成。
4. 增加实体类快速生成的功能,直接在窗体中打开,并用语法高亮显示。
5. 增加可以对表进行选择性生成代码的功能。
6. 增加对MySQL数据库GBK的支持,方便使用中文操作,完好支持MySQL5.0。
7. 改善SQL Analyzer和测试SQL脚本的操作。
8. 改善数据库配置项管理,提供更方便简单的操作。
下面这个是代码生成工具生成的代码,一个解决方案中包括各层所需要的代码哦,另外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
}
}