Database2Sharp是一款主要用于C#代码以及数据库文档生成的工具,软件支持Oracle、SqlServer、MySql、Access、Sqlite等数据库的代码生成,可以生成各种架构代码、生成Winform界面代码、Web界面代码、导出数据库文档、浏览数据库架构、查询数据、生成Sql脚本等,还整合自定义模板和数据库信息的引擎,方便编写自定义模板调试和开发。
1、EnterpriseLibrary架构代码生成
1.1 代码生成总体概述
EnterpriseLibrary代码生成时一个整体性项目代码的生成操作,他能根据设计好数据库信息以及模板文件,生成一个完整性非常高的项目。一般结合我的Winform开发框架进行增量式的项目开发,效率更高,而且更多组件模块的集成,完美的整合,以及模块化的封装,能带给你无穷的开发乐趣同时,使得项目无论从代码风格、用户界面、设计理念,都能保持很好的统一,快速优雅的完成碰到的项目。
使用Database2Sharp来生成框架代码,虽然直接生成的代码,就是一个整体方案的代码,基本上可以直接运行。而Winform开发框架和代码生成工具生成的项目组织上有所不同。下面提供几个注意的地方。
1)代码生成工具生成的代码是基于Project的,而Winform开发框架为了项目数量,方便管理,是把业务层、数据访问层、数据接口层、实体层放到一个工程项目中了(WCF项目会把实体层独立作为一个项目处理),因此生成的代码我们复制到对应的目录位置就可以了,默认命名空间不需要改动。
2)为了代码生成方便,代码生成工具需要把数据库字段的中文说明作为代码注释或者说明的一部分,因此,设计数据库(SqlServer、Oracle等)的时候,我们强烈要求把注释添加到字段说明里面去。
3)数据库表一般需要提供一个主键关键字(建议取名为ID),主键字段可以为自增长的整形类型,也可以是任意字符型。建议SqlServer一般采用自增长整形、Oracle采用Number类型,并为每个表指定一个部分同名的序列名称,如Seq_ABC,其中ABC代表对应的表名。
1.2 数据库表设计
由于我们一般的开发过程是,先设计好数据库,然后生成项目代码框架,再进行调整完善。因此在开发前,我们非常关键的第一步就是要设计好数据库。
数据库设计可以采用多种方式进行,但为了提高设计效率以及方便修改等操作,一般我们最好基于数据库建模软件进行数据库的设计过程,如PowerDeigner就是一个很好的数据库设计平台。如下图所示:
当然数据库设计的时候,也可以指定它们之间的逻辑引用关系,这样对于数据的完整性校验比较有保证,如下图所示。
无论是上面那种设计关系,我们都需要在设计过程中,注意到表字段备注信息,由于在代码生成工具生成代码的时候,很多时候需要使用中文的字段名称来描述,如实体类字段的备注信息、界面的查询字段说明、列表的表头提示等等,这些都是从你设计的数据库表字段备注里面来,因此要特别注意。在PowerDesigner设计软件里面,只需要指定Comment,然后生成SQL的时候,就会有相关的备注信息了。
1.3 代码生成参数配置
基于前面设计好了数据库,生成相关的SQL,然后在数据库管理系统(Oracle/SqlServer/MySql等)上执行脚本,创建数据库成功后。就可以利用代码生成工具进行代码生成了,但生成代码前,需要配置几项参数,以求能够更完美生成项目工程,实现快速使用。
(一)基础参数
在上图我们可以看到,代码生成工具只需要很少的几个属性,就能较好的生成所需的代码。
主命名空间,就是我们的项目代码的命名空间的前面基本不变的部分。如实体类的命名空间一般为WHC.TestProject.Entity,那么主命名一般为WHC.TestProject即可,相应界面层生成后的命名空间为WHC.TestProject.UI,业务逻辑层的命名空间为WHC.TestProject.BLL,数据访问层根据不同的数据库生成不同的命名空间,如Oracle数据访问层命名空间为WHC.TestProject.DALOracle,SqlServer数据访问层命名空间为WHC.TestProject.DALSQL, 而Access数据访问层命名空间为WHC.TestProject.DALAccess等如此类推。
输出目录,顾名思义就是我们代码最终的生成目录了。
过滤表名前缀,是减少代码出现多余的表名前缀。一般在大一些项目上,或者仅仅保持良好的命名习惯上,我们都应该给不同应用范畴的表,通过前缀来进行区分,如我对于基础类可能用“TB_”前缀来区分,对于权限范畴的可能用“T_ACL_”来区分,其他的可能用“T_”来区分等等。这样我们在生成代码的时候,就应该去掉这些多余的前缀,使得我们的业务类更加易读。如字典大类表名称为“TB_DictType”,那么对应的业务类生成应该就是“DictType”了。
(二)别名修改
除了以上的几项设置外,有时候,为了较好调整表名或者字段属性的名称,也增加了一项修改别名的功能,如“ABC”的表名我们不知道是什么意思,如果把它的别名修改为“Company”这样的单词,一般人可能就知道这个类库代表的意义了,别名修改就是为了这样需求而出现的。
别名修改,有表名的别名,和表字段的别名修改两种,如下所示
1.4 代码生成
1.4.1 框架介绍
无论是在项目开始阶段的全新代码生成或者在框架搭建起来后(如基于Winform开发框架、WCF开发框架),虽然起点有所不同,但是都是一个框架模式搭建完善相关的业务模块的。
无论是基于Winform、Webform的开发应用,甚至是基于分布式程序开发的WCF开发模式,利用Database2Sharp都能使你感到事半功倍的成就感,由于它们三者都是在基于EnterpriseLibrary的框架代码生成基础上完成的,这个框架模式是通用于上述几种不同的应用开发框架,它们大致的框架布局如下所示。
Winform开发框架以及Web开发框架,它们就是在BLL业务逻辑层之上搭建一层界面展示层而已,而WCF开发框架则还需要在BLL业务逻辑层之上搭建一层WCF服务层,然后在界面层和WCF服务层之间,通过服务应用的方式,增加一层WCF服务层的代理层,如下所示。
Winform开发框架适用于开发用户体验好、功能强大的业务管理系统,可以基于单机版数据库(如Access、Sqlite等数据库)或者基于局域网的数据库,如Oracle、SqlServer、MySql、Mongodb、DB2等网络型的数据库应用,也就是我们传统所说的C/S架构模式。
Web开发,一般也可以开发功能强大的业务管理系统,不过较Winform来讲,它的用户体验会差一些,而且需要部署在IIS上,部署会比较麻烦一些,但特点是能够部署分布式的应用,而且不用安装软件,直接在IE、Chrome浏览器上打开URL连接即可使用,是传统所说的B/S应用模式。
而WCF开发框架,是利用了C/S应用模式里面的程序良好的界面体验性、响应快速性等特点,也充分利用了B/S应用模式里面的分布式架构特点,是一种融合前两种框架特点应用模式,对于要求分布式,有要较好的用户体验性,这种框架是很好的选择。
1.4.2 数据库连接配置
了解了不同的框架用途,我们就可以利用代码生成工具来搭建我们所需的业务管理系统了。
第一步,配置对应数据库连接信息。数据库SqlServer的配置信息如下所示。
Oracle数据库配置信息如下所示:
Oracle数据库除了配置以上信息外,还要注意的是,需要利用NetManager来配置好对应Oracle数据库名称的侦听配置,如下所示。也就是Oracle需要安装好对应版本的Oracle客户端,配置好数据库侦听信息才能使用代码生成工具Database2Sharp访问Oracle数据库表信息,这样是一般常规Oracle工具需要做的操作,包括PLSQL Developer。
MySql数据库配置信息如下所示,注意的是,MySql数据库一般有一些编码的设置,为了有效获取对应数据库表、字段的备注等中文信息,需要设置正确的字符编码才能获取到:
Access数据库配置信息如下所示,一般情况下,只需要指定Access数据库路径即可,如果有密码,填上数据库密码信息。
Sqlite数据库配置信息如下所示,一般情况下,只需要指定Sqlite数据库路径即可。
1.4.3 代码生成
代码生成工具,是结合数据库信息进行代码生成的过程,因此需要先获取对应数据库信息。
第一步,在Database2Sharp左边的树形数据库列表中,单击展开对应数据库的详细表,由于Database2Sharp是一次性加载方式,加载数据库表的信息同时,也会加载相关的视图、存储过程(Oracle、SqlServer)、以及表字段和表之间的关系等等信息。
单击其中一个表,我们可以看到对应该表的字段信息,以及创建表的SQL语句,也就是我们常说的DDL脚本。
第二步,在数据库节点上,单击鼠标右键,选择【代码生成】- 【EnterpriseLibrary代码生成】菜单,开始生成代码如下所示。
第三步,选择相应的数据库以及数据库表,用于代码的生成。
第四步,设置相关的代码生成配置信息,包括项目主命名空间,输出目录,以及过滤表名前缀等。
第五步,确认代码生成操作,一般确认,就会对选定的表进行项目代码的生成操作,生成一体化的整体性解决方案。
如果项目是要生成基于WCF开发框架的,那么勾选“同时生成WCF服务项目”选项即可(工具注册用户可用)。
勾选后,可以修改WCF服务的项目名称,方便创建不同的WCF业务项目。WCF项目是基于VS2010开发环境、.NET4.0框架的项目,这是目前最优的配置信息了。
如果勾选生成后打开解决方案,那么代码生成完成后,就会自动打开项目工程,你可以尝试编译,一般情况下,可以完全编译通过的。
以上就是我对于代码生成工具Database2Sharp的一些总结,希望对大家使用Database2Sharp快速开发项目有所帮助。
本文转自博客园伍华聪的博客,原文链接:Database2Sharp代码生成工具使用心得,如需转载请自行联系原博主。