database2sharp代码生成工具-使用帮助


广州爱奇迪软件科技有限公司( http://www.iqidi.com) Mail:wuhuacong@163.com Database2Sharp 代码生成工具 使用帮助 V3.0 伍华聪 2015 年 06 月 广州爱奇迪软件科技有限公司( http://www.iqidi.com) Mail:wuhuacong@163.com 目录 1 前言 ............................................................................................................................................. 1 2 几种开发框架介绍 ................................................................................................................. 2 2.1 传统 WINFORM 开发框架 ......................................................................................... 2 2.2 WCF 开发框架 ................................................................................................................ 3 2.3 混合型开发框架 ........................................................................................................ 5 2.4 ENTITY FRAMEWORK 实体框架 ................................................................................... 9 3 适用范围 .................................................................................................................................. 14 4 ENTERPRISELIBRARY 架构代码生成 ....................................................................... 16 4.1 代码生成总体概述 .................................................................................................. 16 4.2 数据库表设计 ........................................................................................................... 17 4.3 代码生成参数配置 .................................................................................................. 20 4.4 代码生成 .................................................................................................................... 23 5 界面层代码的生成 ............................................................................................................... 36 5.1 WEB 界面代码生成 ...................................................................................................... 36 5.2 WINFROM 界面代码生成 ............................................................................................ 39 6 其他辅助功能......................................................................................................................... 45 6.1 实体类快速生成 ...................................................................................................... 45 6.2 数据库文档生成 ...................................................................................................... 47 6.3 自定义模板代码生成 ............................................................................................. 50 1 1 前言 Database2Sharp是一款代码生成工具和数据库文档生成工具,该工具从2005 年开始至今,一直伴随着我及我们的客户和粉丝们经历着过各种各样的项目开 发,在实际开发中能带来效率的提高及编程的快乐。 Database2Sharp 是一款主要用于 C#代码以及数据库文档生成的工具,软件 支持 Oracle、SqlServer、MySql、Sqlite、Access、以及国产达梦等数据库的代 码生成,可以生成各种架构代码、生成 Winform 界面代码、Web 界面代码、导 出数据库文档、浏览数据库架构、查询数据、生成 Sql 脚本等,还整合自定义 模板和数据库信息的引擎,方便编写自定义模板调试和开发。 Database2Sharp 推荐采用软件功能“Enterprise Library 代码生成”来生成 项目代码,这个架构体系生成整个项目工程框架,包含实体类、数据访问类、 业务类、Web 页面代码、WCF 相关服务层(可选)等。该架构利用泛型及缓存 机制,良好的架构极大简化代码,强大完善的基类机制使你甚至不用编写一行 代码就能顺利运行。一个简单点击几次鼠标就能完成一周代码量的代码生成工 具,效率惊人、友好体贴,真正的开发好伴侣。 当然,开发的过程是一个繁复、精细的过程,因此 Database2Sharp 也吸收 了来自我自己的实际需求,以及很多同仁朋友的宝贵意见,一直在改进,一直 努力做到更好,以求达到一个更加完美、更加易用的境界。 另外,我们在 2015 年,在代码生成工具中增加“Entity Framework 实体框 架代码生成”的架构,该框架利用微软最新的 Entity Framework 实体框架,采 用基于泛型的仓储模式实体框架(The Entity Framework of Generic Repository Pattern )来构建,框架的结构类似“Enterprise Library 代码生成”的结构,不 过底层数据访问层采用了全新的 LINQ 操作。 如果您有好的意见以及建议,如能不吝赐教,则感激不尽,可以通过邮件 wuhuacong@163.com 或者 QQ 6966254 与我联系。 2 2 几种开发框架介绍 2.1 传统 Winform 开发框架 我这里指的传统 Winform 开发框架(简称 Winform 开发框架),就是利用数 据库中间件,直接访问数据库的一种应用框架,根据数据库管理系统部署的位 置的不同,可能分为单机版(如 Access 数据库、Sqlite 数据库等),局域网网络 版(如 SqlServer、Oracle 等数据库)。局域网网络版,一般需要的是把数据库 部署在局域网另外一个电脑上,这样应用和数据库分开,也有利于性能的提高 和数据的分享。 这种开发模式,在 .NET 里面,就是利用基于 ADO.NET 的操作,实现数 据的直接访问,是一种比较常规的开发模式;不过问题就是,不能通过互联网 进行数据的访问,只能在单机或者局域网的环境下进行业务管理系统的部署和 使用,相对目前很多分布式的应用来讲,有一定的局限性。 不过这种方式也是很常见的模式,常用在一些内部业务管理系统或者一些工 作流系统的维护上,由于 Winform 界面的体验性比较好,数据也能有效管理控 制,开发部署成本也相对较低,系统开发效率以及应用性能也比较高,因此是 一种比较常见的框架表现模式。 这种 Winform 开发框架 是通过数据访问层访问各种指定的数据库,如 SqlServer 或者 Oracle 等,一般底层封装好一点的框架,基本上都会支持多种数 据库,方便在不同的业务中使用。我们的传统 Winform 开发框架的架构设计图, 如下所示。 3 2.2 WCF 开发框架 除了以上的传统的 Winform 开发框架,基于 Winform 的技术和 WCF 的分布 式技术,形成了另外一种 Winform 开发框架,即为 WCF 开发框架,我这个 WCF 开发框架的介绍也比较多,绝大多数都是来源于真实的项目应用。其实 WCF 技术,即可用于 Winform 上,也可以用于 Web 上,WCF 技术可以用在很多领 域,如 Web 开发、类似 Socket 通讯的即时通讯应用等,这里介绍的 WCF 开发 框架,是基于 Winform 的基础上使用的 WCF 开发框架。 这里定义的传统 WCF 开发框架,是指利用 WInform 框架的模式,来承载 4 B/S 的方式获取数据进行展示,本地不存储数据。就是直接获取数据并在列表 控件或者其他基础控件上显示数据。 由于 WCF 框架应用了很多新的技术,以及是基于分布式网络环境的应用, 因此,需要考虑服务的部署,数据访问的安全性(用户名密码访问、X509 证书 加密、其他授权访问),数据响应以及错误处理等方方面面,如果是第一次接触, 没有很好的指导及案例学习,可能消化相关的概念并理解,就需要一个不短的 学习过程。 传统的 WCF 开发框架,由于是本地不存储数据,实时通过 WCF 服务代理, 向 WCF 服务请求数据,获取数据后进行显示的过程,开发思路相对比较简单, 因此这种方式在很多 WCF 应用上,是比较常见的一种。 传统的基于 Winform 的 WCF 开发框架,界面可以和上面的 Winform 开发框 架界面一样,不过它的获取数据的机制不同,它不是通过数据访问类对本地数 据库进行访问,而是通过服务器公布 WCF 服务来获取不同数据对象,然后在 Winform 界面中进行呈现,如下面是它的一个访问机制的示意图。 对于这个传统的 WCF 开发框架的架构,它其实是通过 Winform 的客户端 WCF 代理类,实现和远端服务器的 WCF 服务进行通讯,一般是基于 Soap 协议的 XML 格 式,当然可以很好的配置加密机制,如 X509 证书加密,这样传输数据就比较安全; 5 同时对于 WCF 服务,还可以采用基于自定义的用户名、密码的验证方式来有效提高 WCF 服务接口的安全性。以下是 WCF 开发框架的架构设计图,我们从中可以看出, 它的应用程序的界面表现层是和 WCF 服务客户端代理层有关联,而代理层和 WCF 服务层有关联,这种隔绝了应用程序直接访问数据库的弊端,提高数据安全性,同时 也使得应用程序实现了分布式的开发应用。 2.3 混合型开发框架 6 混合型框架可以看成是 Winform 框架高级版本,除了它本身是一个完整的 业务系统外,它外围的所有辅助性模块均(如通用权限、通用字典、通用附件 管理、通用人员管理。。。。)都实现了这种混合型的框架,因此使用非常方便, 整个框架如果简化来看,就是在原有的 Winform 界面层,用接口调用方式,避 免和业务逻辑类的紧耦合关系。由于他是通过接口方式的调用方式,它本身又 可以通过配置指定指向 WCF 的实现(既适应 Winform集成,也适应 WCF 集成), 因此也囊括了 WCF 框架的一切特点。 2.3.1 混合型框架的特点 混合型框架具有下面几个特点: 1)环境适应性强,模块可重用性高。由于混合型框架,既可以用于传统 Winform 系统开发,也可以用于 WCF 分布式系统开发,因此环境适应性强; 而且由于模块具有这些特点,可重用性更高,特别对于通用性的模块,更是具 有无可替代的优越性。 2)响应性能更好。如果是 Winform 程序,那么就使用直接访问数据库方 式,如果是 WCF 调用方式,就使用 WCF 的专有通道进行数据处理,更好利用 系统资源,高效进行数据处理。 3)独立配置,更少的代码修改。所有通用模块,全部通过独立配置文件进 行配置 WCF 的连接,减少主配置文件的复杂性;WCF 服务逻辑独立类库,可 采用多种服务寄宿方式。 7 2.3.2 混合型框架总体设计思路 Winform 开发框架之混合型框架,还是秉承模块化的思路,可以把这个框 架分为两大块,一块是主要业务系统模块(如备件管理系统),一块是各种辅助 性模块(如通用权限、通用字典、通用附件管理、通用人员管理。。。。),这种两 块组合,就是一个完美的系统了。 整个系统的业务系统模块和辅助性模块,都是基于一个思路,通过接口调 用开关,决定调用的是 WCF 服务层,还是 Winform 业务层(直接访问数据库), 当然界面层的调用不管是调用 WCF 服务层还是 Winform 业务层,都是基于相 同的接口,我们可以把它称为 Facade 层。辅助性模块则是多种常用模块的组 合,它们可能是下面几种的常见模块:通用权限模块、通用字典模块、通用附 件管理模块、通用人员管理模块等等。 2.3.3 混合式框架的代码生成工具支持 8 当然,虽然混合型框架比传统的 Winform 框架和 WCF 开发框架更为通用, 不过由于它引入了多一层,而且为了实现更多模块的分离,增加了一些设计上 的复杂性,整个项目工程看起来显得复杂了一点,如下面就是一个以字典模块 为例的混合型框架的内部结构。 从上图我们可以看到,整个混合型框架的架构,分为了 UI 层、接口调用层、 Facade 接口层、Winform 调用层、WCF 服务调用层、业务层、实体层、以及数 据库层等;其中的业务层还可以细化为 BLL 业务逻辑层、数据接口层、数据访 问层、实体层等,整个模块通过实体层进行数据的传输载体。 9 为了实现更简单化的开发,更快更高效的完成混合型框架的开发工作,我 扩展了我们的代码生成工具 Database2Sharp,使其支持这种混合型框架的代码 生成工作,这样开发混合型框架就和开发其他两种 Winform 开发框架、WCF 开发框架一样,非常方便了。 2.4 Entity Framework 实体框架 一个基于泛型的仓储模式的实体框架,全部利用 LINQ 高效的语法进行底 层操作,包含数据传输模型 DTO 和实体模型 Entity 层、实体关系映射层、数据 访问类、业务逻辑类、WCF 相关服务层等。 该架构利用泛型的仓储设计,传输模型 DTO 和实体模型 Entity 的分离与联 合,实体对象的动态映射关系、Unity 依赖注入等特性,融合了微软最新开发 技术以及业界的组件应用,能快速、高效、统一实现更好的业务开发。 2.4.1 Entity Framework 实体框架结构 10 基于方便管理的目的,每个模块都可以采用一种固定分层的方式来组织模 块的业务内容,每个模块都是以麻雀虽小、五脏俱全的方针实施。实例模块的 整个业务逻辑层的项目结构如下所示。 如果考虑使用 WCF,那么整体的结构和我之前的混合框架差不多,各个模 块的职责基本没什么变化,不过由原先在 DAL 层分开的各个实现层,变化为 各个数据库的 Mapping 层了,而模型增加了 DTO,具体项目结构如下所示。 11 具体的项目说明如下所示: EFRelationship 系统的业务模块及接口、数据库访问模块及接口、DTO 对象、实体类对象、各种数据库映射 Mapping 类等相关 内容。该模块内容紧密结合 Database2Sharp 强大代码 生成工具生成的代码、各层高度抽象继承及使用泛型支持 多数据库。 EFRelationship.WCFLibrary 系统的 WCF 服务的业务逻辑模块,该模块通过引用文件 方式,把业务管理逻辑放在一起,方便 WCF 服务部署及 调用。 EFRelationshipService 框架 WCF 服务模块,包括基础服务模块 BaseWcf 和业 12 务服务模块,他们为了方便,分开管理发布。 EFRelationship.Caller 定义了具体业务模块实现的 Façade 应用接口层,并对 Winform 调用方式和 WCF 调用方式进行包装的项目。 2.4.2 实体框架架构设计图 具体我们以一个会员系统设计为例,它的程序集关系如下所示。 我们来看看整个架构的设计效果如下所示。 13 其中业务逻辑层模块(以及其它应用层)我们提供了很多基于实体框架的 公用类库(WHC.Framework.EF),其中的继承关系我们将它放大,了解其中的 继承细节关系,效果如下所示。 14 上图很好的概述了我们的 EF 实体框架的设计思路,这些层最终还是通过代 码生成工具 Database2Sharp 进行一体化的生成,以提高快速生产的目的,并且 统一所有的命名规则。 3 适用范围 Database2Sharp 主要定位于 C#应用开发,因此主要针对从实际项目框架提 炼而来模板来进行项目开发,力求达到省事省力的目的。下面列出该工具针对 的应用场景。 15 1、Enterprise Library 代码生成。生成整个项目工程框架,包含实体类、 数据访问类、业务类、Web 页面代码、WCF 相关服务层等。该架构利用泛型及 缓存机制,良好的架构极大简化代码,强大完善的基类使你甚至不用编写一行 代码。该模式可以生成基于 Web 框架项目、传统 Winform 框架项目、WCF 框 架项目,以及混合型框架项目,它们是非常成熟,应用很广的几种项目框架。 2、Winform 界面代码自动生成。可以生成 Winform 界面布局代码,后台 逻辑代码,生成即可使用,极大提高开发 Winform 界面的效率,较少枯燥的开 发过程。 3、基于 MVC 的 Web 界面代码生成。结合我们的《基于 MVC4+EasyUI 的 Web 开发框架》,快速整体的界面代码,包括生成列表、增加、修改、查看、 删除等界面代码,生成代码可直接在 Web 框架中进行整合运行,界面美观。 4、Entity Framework 微软实体框架代码生成,生成整个基于泛型的仓储 模式的实体框架,全部利用 LINQ 高效的语法进行底层操作,包含数据传输模 型 DTO 和实体模型 Entity 层、实体关系映射层、数据访问类、业务逻辑类、 WCF 相关服务层等。该架构利用泛型的仓储设计,传输模型 DTO 和实体模型 Entity 的分离与联合,实体对象的动态映射关系等特性,良好的架构极大简化 代码,强大完善的基类使你甚至不用编写一行代码。完美支持 Winform 开发框 架、混合式 Winfrom 开发框架、基于 MVC4+EasyUI 的 Web 开发框架的整合开 发工作。 5、常规实体类、WCF 实体类、自定义实体类代码快速生成。提供各种常 用的实体类代码生成,直接在窗体中显示,并用语法高亮显示,方便拷贝使用。 6、可视化查看数据库信息。可以查看数据库的信息和实现查询分析器的功 能,可以很快地看看数据库的信息。 7、数据库文档的生成。支持从数据库直接生成相关的数据库文档,在模块 设计中非常有用,谁想去写描述和字段名称,类型的对应关系呢? 8、数据库语句生成。增加 Select、Update、Insert 和 Delete 基本语句代码的 生成,方便您直接在代码中使用。 9、自定义模板代码生成。Database2Sharp 采用了方便灵活、功能强大的 NVelocity 模板引擎作为代码生成的一部分,你可以程序目录中修改相应的代码 16 模板,实现部分自定义的代码生成。工具自带有一些典型语法例子案例供参考 学习,也提供了数据库相关的架构信息说明。 4 EnterpriseLibrary 架构代码生成 4.1 代码生成总体概述 EnterpriseLibrary 代码生成时一个整体性项目代码的生成操作,他能根据设 计好数据库信息以及模板文件,生成一个完整性非常高的项目。一般结合我们 的 Winform 开发框架、WCF 开发框架或者混合型开发框架,进行增量式的项 目开发,效率更高,而且可以可以利用更多已经开发好的、现成的组件模块的 集成,完美的整合,以及模块化的封装,能带给你无穷的开发乐趣同时,使得 项目无论从代码风格、用户界面、设计理念,都能保持很好的统一,快速优雅 的完成碰到的项目。 使用 Database2Sharp 来生成框架代码,虽然直接生成的代码,就是一个整体 方案的代码,基本上可以直接运行。而 Winform 开发框架和代码生成工具生成 的项目组织上有所不同。下面提供几个注意的地方。 17 1)代码生成工具生成的代码是基于 Project 的,而 Winform 开发框架为了项 目数量,方便管理,是把业务层、数据访问层、数据接口层、实体层放到一个 工程项目中了(WCF 项目会把实体层独立作为一个项目处理),因此生成的代 码我们复制到对应的目录位置就可以了,默认命名空间不需要改动。 2)为了代码生成方便,代码生成工具需要把数据库字段的中文说明作为代 码注释或者说明的一部分,因此,设计数据库(SqlServer、Oracle 等)的时候, 我们强烈要求把注释添加到字段说明里面去。 3)数据库表一般需要提供一个主键关键字(建议取名为 ID),主键字段可 以为自增长的整形类型,也可以是任意字符型。建议 SqlServer 一般采用自增长 整形、Oracle 采用 Number 类型,并为每个表指定一个部分同名的序列名称, 如 Seq_ABC,其中 ABC 代表对应的表名。 4.2 数据库表设计 由于我们一般的开发过程是,先设计好数据库,然后生成项目代码框架, 再进行调整完善。因此在开发前,我们非常关键的第一步就是要设计好数据库。 数据库设计可以采用多种方式进行,但为了提高设计效率以及方便修改等 操作,一般我们最好基于数据库建模软件进行数据库的设计过程,如 PowerDeigner 就是一个很好的数据库设计平台。如下图所示: 18 图表 4-1 数据库设计 当然数据库设计的时候,也可以指定它们之间的逻辑引用关系,这样对于 数据的完整性校验比较有保证,如下图所示。 19 图表 4-2 数据库设计 2 无论是上面那种设计关系,我们都需要在设计过程中,注意到表字段备注 信息,由于在代码生成工具生成代码的时候,很多时候需要使用中文的字段名 称来描述,如实体类字段的备注信息、界面的查询字段说明、列表的表头提示 等等,这些都是从你设计的数据库表字段备注里面来,因此要特别注意。在 PowerDesigner 设计软件里面,只需要指定 Comment,然后生成 SQL 的时候, 就会有相关的备注信息了。 20 图表 4-3 数据库设计 3 4.3 代码生成参数配置 基于前面设计好了数据库,生成相关的 SQL,然后在数据库管理系统 (Oracle/SqlServer/MySql 等)上执行脚本,创建数据库成功后。就可以利用代 码生成工具进行代码生成了,但生成代码前,需要配置几项参数,以求能够更 完美生成项目工程,实现快速使用。 (一)基础参数 21 图表 4-4 基础参数设置 在上图我们可以看到,代码生成工具只需要很少的几个属性,就能较好的 生成所需的代码。 主命名空间,就是我们的项目代码的命名空间的前面基本不变的部分。如 实体类的命名空间一般为 WHC.TestProject.Entity , 那 么 主 命 名 一 般 为 WHC.TestProject 即可,相应界面层生成后的命名空间为 WHC.TestProject.UI, 业务逻辑层的命名空间为 WHC.TestProject.BLL,数据访问层根据不同的数据库 生成不同的命名空间,如 Oracle 数 据 访 问 层 命 名 空 间 为 WHC.TestProject.DALOracle , SqlServer 数据访问层命名空间为 WHC.TestProject.DALSQL, 而 Access 数据访问层命名空间为 WHC.TestProject.DALAccess 等如此类推。 输出目录,顾名思义就是我们代码最终的生成目录了。 过滤表名前缀,是减少代码出现多余的表名前缀。一般在大一些项目上, 或者仅仅保持良好的命名习惯上,我们都应该给不同应用范畴的表,通过前缀 来进行区分,如我对于基础类可能用“TB_”前缀来区分,对于权限范畴的可 22 能用“T_ACL_”来区分,其他的可能用“T_”来区分等等。这样我们在生成 代码的时候,就应该去掉这些多余的前缀,使得我们的业务类更加易读。如字 典大类表名称为“TB_DictType”,那么对应的业务类生成应该就是“DictType” 了。 (二)别名修改 除了以上的几项设置外,有时候,为了较好调整表名或者字段属性的名称, 也增加了一项修改别名的功能,如“ABC”的表名我们不知道是什么意思,如 果把它的别名修改为“Company”这样的单词,一般人可能就知道这个类库代 表的意义了,别名修改就是为了这样需求而出现的。 别名修改,有表名的别名,和表字段的别名修改两种,如下所示 图表 4-5 表别名修改 23 图表 4-6 表字段别名修改 4.4 代码生成 4.4.1 框架介绍 无论是在项目开始阶段的全新代码生成或者在框架搭建起来后(如基于 Winform 开发框架、WCF 开发框架、混合型开发框架),虽然起点有所不同, 但是都是一个框架模式搭建完善相关的业务模块的。 无论是基于 Winform、Webform 的开发应用,甚至是基于分布式程序开发 的 WCF 开发模式,利用 Database2Sharp 都能使你感到事半功倍的成就感,由 于这几种开发框架都是在基于 EnterpriseLibrary 的框架代码生成基础上完成的, 这个框架模式是通用于上述几种不同的应用开发框架,它们大致的框架布局如 下所示。 24 pkg Architecture Model 业务逻辑层 界面表现层 数据访问层 数据库 SQL Server Enterprise Library DAL IDAL BLL UIEntityCommon 权限管理组件 BaseBLL 表示引用的外部组件或通用模块 分页控件 布局控件 图表控件 字典管理组件 BLLFactory Microsoft Access Oracle IBaseDAL BaseDAL 图表 4-7 Winform 开发框架/Web 开发框架设计图 Winform 开发框架以及 Web 开发框架,它们就是在 BLL 业务逻辑层之上搭 建一层界面展示层而已,而 WCF 开发框架则还需要在 BLL 业务逻辑层之上搭 建一层 WCF 服务层,然后在界面层和 WCF 服务层之间,通过服务应用的方式, 增加一层 WCF 服务层的代理层,如下所示。 25 图表 4-8 WCF 开发框架设计图 Winform 开发框架适用于开发用户体验好、功能强大的业务管理系统,可 以基于单机版数据库(如 Access、Sqlite 等数据库)或者基于局域网的数据库, 如 Oracle、SqlServer、MySql、Mongodb、DB2 等网络型的数据库应用,也就 是我们传统所说的 C/S 架构模式。 26 Web 开发,一般也可以开发功能强大的业务管理系统,不过较 Winform 来 讲,它的用户体验会差一些,而且需要部署在 IIS 上,部署会比较麻烦一些, 但特点是能够部署分布式的应用,而且不用安装软件,直接在 IE、Chrome 浏 览器上打开 URL 连接即可使用,是传统所说的 B/S 应用模式。 而 WCF 开发框架,是利用了 C/S 应用模式里面的程序良好的界面体验性、 响应快速性等特点,也充分利用了 B/S 应用模式里面的分布式架构特点,是一 种融合前两种框架特点应用模式,对于要求分布式,有要较好的用户体验性, 这种框架是很好的选择。 4.4.2 数据库连接配置 了解了不同的框架用途,我们就可以利用代码生成工具来搭建我们所需的 业务管理系统了。 第一步,配置对应数据库连接信息。数据库 SqlServer 的配置信息如下所示。 图表 4-9 SqlServer 数据库连接配置 27 Oracle 数据库配置信息如下所示: 图表 4-10 Oracle 数据库连接配置 Oracle 数据库除了配置以上信息外,还要注意的是,需要利用 NetManager 来配置好对应 Oracle 数据库名称的侦听配置,如下所示。也就是 Oracle 需要安 装好对应版本的 Oracle 客户端,配置好数据库侦听信息才能使用代码生成工具 Database2Sharp 访问 Oracle 数据库表信息,这样是一般常规 Oracle 工具需要做 的操作,包括 PLSQL Developer。 28 图表 4-11 Oracle 数据库连接配置 2 MySql 数据库配置信息如下所示,注意的是,MySql 数据库一般有一些编 码的设置,为了有效获取对应数据库表、字段的备注等中文信息,需要设置正 确的字符编码才能获取到: 29 图表 4-12 MySql 数据库配置 Access 数据库配置信息如下所示,一般情况下,只需要指定 Access 数据库 路径即可,如果有密码,填上数据库密码信息。 30 图表 4-13 Access 数据库配置 Sqlite 数据库配置信息如下所示,一般情况下,只需要指定 Sqlite 数据库路 径即可。 31 图表 4-14 Sqlite 数据库配置 4.4.3 代码生成 代码生成工具,是结合数据库信息进行代码生成的过程,因此需要先获取 对应数据库信息。 第一步,在 Database2Sharp 左边的树形数据库列表中,单击展开对应数据 库的详细表,由于 Database2Sharp 是一次性加载方式,加载数据库表的信息同 时,也会加载相关的视图、存储过程(Oracle、SqlServer)、以及表字段和表之 间的关系等等信息。 单击其中一个表,我们可以看到对应该表的字段信息,以及创建表的 SQL 语句,也就是我们常说的 DDL 脚本。 32 图表 4-15 展开对应数据库表 第二步,在数据库节点上,单击鼠标右键,选择【代码生成】- 【EnterpriseLibrary 代码生成】菜单,开始生成代码如下所示。 33 图表 4-16 开始代码生成 第三步,选择相应的数据库以及数据库表,用于代码的生成。 图表 4-17 选定数据库 34 图表 4-18 选定数据库表 第四步,设置相关的代码生成配置信息,包括项目主命名空间,输出目录, 以及过滤表名前缀等。 图表 4-19 设置生成配置信息 35 第五步,确认代码生成操作,一般确认,就会对选定的表进行项目代码的 生成操作,生成一体化的整体性解决方案。 图表 4-20 确认代码生成操作 如果项目是要生成基于 WCF 开发框架的,那么勾选“同时生成 WCF 服务 项目”选项即可(工具注册用户可用),勾选后,可以修改 WCF 服务的项目名 称,方便创建不同的 WCF 业务项目。WCF 项目是基于 VS2010 开发环 境、.NET4.0 框架的项目。 如果项目是生成基于混合型开发框架的,那么勾选“生成混合式框架项目” 选项即可(工具注册用户可用),勾选后,“同时生成 WCF 服务项目”也会默 认勾选,因为混合型框架式基于 Winform 和 WCF 两种的混合体项目。WCF 项 目是基于 VS2010 开发环境、.NET4.0 框架的项目,这是目前最优的配置信息了。 如果勾选生成后打开解决方案,那么代码生成完成后,就会自动打开项目 工程,你可以尝试编译,一般情况下,可以完全编译通过的。 36 图表 4-21 WCF 生成信息配置 5 界面层代码的生成 5.1 Web 界面代码生成 界面开发,无论对于 Web 开发,还是 Winform 开发,都需要耗费一定的时 间,特别对于一个数据库字段比较多的界面,一般就需要在编辑界面上摆的更 多的控件来做数据显示,每次碰到这个,都有点头痛,反复的机械操作让人挺 累,也很烦,但是又必须这样做。 由于数据库字段和界面的排版都有一定的关联关系,因此可以通过代码生 成工具 Database2Sharp 的数据库元数据,包含表名称、备注信息、字段列表, 以及每个字段的名称、备注、类型等信息,构造一个基础的界面,把重复机械 的部分给快速完成,这就是我所说的界面快速生成。当然,对于精致的界面, 机械的生成肯定不能满足我们的需要,因此真正的界面需要在这个基础上修改 完善一下,但是由于重复劳动部分,已经给工具处理掉了,因此,界面开发效 37 率会大大提高。 5.1.1 基于 Web 界面的快速生成 EnterpriseLibrary 的框架代码生成后,已经同时生成了一个 Web 界面的项 目,包含常见的列表显示页面、内容编辑(新增和修改),以及内容查看页面的 基础性页面了。 Web 界面工程已经添加了相关的引用程序集及必须的控件,生成后即可编 译运行,一些表字段设计合理的话,甚至不用修改一行代码就能直接使用,如 下所示。 图表 5-1 Web 界面项目生成 以下是 TB_ItemDetail 表生成的界面,没有修改过任何东西,列表页面呈现 的效果。 38 图表 5-2 Web 界面中的列表界面效果 其中编辑及查看页面也生成了,直接单击连接就可以看到效果,如下图所示。 图表 5-3 Web 界面中的查看界面效果 39 图表 5-4 Web 界面中编辑(或新增)界面效果 这些效果是很基本的界面布局了,如果需要更好看的,可以根据需要调整 下每行的数量,以及显示方式。这样的效果,虽然不算最好看,但是已经帮我 们把界面元素弄起来了,我们后面的工作就很好开展,不用再重复添加每个字 段对应的控件布局信息了。 有了这些智能的界面生成,界面开发其实是一件不再枯燥的事情,节省更多 的时间,做更有意义的事情。 5.2 Winfrom 界面代码生成 除了 Web 的界面开发,Winform 的界面开发,当然也很重要,枯燥的事情 一样可以交给代码生成工具 Database2Sharp 进行生成,不需要让人工反复的做 这些无用功,或者是技术含量不太高的东西。 上面 Web 界面工程,我是采用 SQLServer 的数据库进行生成代码的,这个 例子,我们介绍一下 Oracle 数据库的生成方式,其实这个代码生成工具,对应 用什么数据库不重要,都会很好的给你生成相关的界面信息,不管你是用 40 SQLServer 还是 Oracle,或者是 Sqlite、Access、MySql 等等,都一样可以很好 的生成所需的开发代码的。 Winform 界面代码生成的主界面如下所示: 图表 5-5 Winform 界面代码生成 Winform 界面生成界面提供了很多参数进行控制,以期生成精细化的界面内 容。Winform 界面生成对应我们的 Winform 开发框架,提供了三种不同的界面 样式,包括传统界面样式、DotNetbar 界面样式和 DevExpress 界面样式,这几 种样式有不同的应用场景,是目前应用最广的几种方式。 图表 5-6 Winform 界面代码生成 2 5.2.1 Winform 数据编辑界面生成 (一)基于 DevExpress 的 Winform 界面快速生成 41 工具生成了界面布局代码,以及界面后台逻辑代码,这样的代码正是我们开发所需要 的,我们看到生成后的界面代码(没有修改代码的),在 VS 里面的真实效果如下。 图表 5-7 Winform 编辑界面 1 上面的布局采用了 LayoutControl 来进行布局控制,这是一种很好的布局控 制方法,它除了使得界面更加美观外,还能非常自由调整每个控件的位置及大 小。 当然,我们一般为了美观需要,会对界面进行一定的调整,由于 DevExpress 控件类型变化切换很方便,所以这种调整很自由高效,调整后的界面如下所示。 42 图表 5-8 Winform 编辑界面 2 比起利用 Database2Sharp 工具,十几秒钟弄好这样一个界面,纯手工做这 样的界面,没有十几分钟,估计弄不好的,而且容易出错,最重要的问题,就 是团队开发的时候,这个统一性就很有保证,开发效率高,带来 Bug 也会很少。 (二)基于传统的 Winform 界面快速生成 传统的 Winform 界面和 DotNetBar 样式的界面生成,和上面的 DevExpress 样式代码很类似,不过控件不同而已,由于不同的需要,用传统界面元素开发, 也是一种常见的开发模式,因此我们的代码生成工具也支持这种常规的界面生 成,来辅助大家做好界面的工作。得到的界面效果如下所示。 43 图表 5-9 Winform 编辑界面 3 和 DevExpress 控件界面代码类似,这里也使用了 TableLayout 的布局控件, 用来较好控制布局的高度宽度,以及每行位置等,这样整体效果就很好,也容 易进行界面元素的控制。 5.2.2 Winform 查询列表界面生成 很多情况下,查询列表界面很常见,如果能快速生成标准的界面,除了可 以节省时间,提高开发效率外,也给我们统一界面风格及代码风格等方面,提 供更好的支持。 复杂累赘的界面能够自动生成,绝对是开发过程的一大提升,让我们更加 享受开发的乐趣。 1)设置好相关的界面参数,如指定列表的查询字段、列表显示字段,选择 界面样式,以及设定代码的主命名空间等参数。 2)生成界面代码到文件后,把文件直接复制到项目中,不用修改直接就可 以看到列表界面效果,Yeah,正是我们需要的样式。 44 图表 5-10 Winform 查询列表界面生成设置 图表 5-11 Winform 查询列表界面效果 当然,上面的查询条件可以一行,也可以两行或者多行,界面生成的时候, 会自动合理计算好布局,保证完美展现我们想要的列表界面效果。以上界面几 乎不用任何修改就直接可以编译运行,里面的后台代码也同时生成了。 后台代码里面生成包括,分页控件展示及列表查询显示、Excel 数据导入、 数据导出等功能的后台界面代码。 传统界面效果生成操作,只需要选择传统界面样式,生成即可,得到的初 始化界面如下所示。 45 如果是只是指定了几个查询条件(一行的情况),那么工具会自动计算好布 局位置,得到界面效果如下所示。 代码生成工具Database2Sharp还提供了生成基于DotNetbar 的样式的查询列 表界面代码,和上图类似,在此不再赘述。 通过代码生成工具,不仅可以生成整体性的 EnterpriseLibary 框架结构代码, 连我们繁琐的 Web 界面、Winform 界面都能快速、高标准生成,开发界面其实 是一件很轻松快速的事情,不要整天从数据库字段和界面属性设置中来回切换 了。有了 Database2Sharp 代码生成工具,一切变得宁静很多,但更加快速。 6 其他辅助功能 6.1 实体类快速生成 6.1.1 基于数据库的实体类快速生成 46 有时候,仅仅是一些特殊的需要,需要生成相应的实体类信息,供使用或 者参考,那么我们在具体的表名上,右键菜单【实体类生成快速入口】会列出 三种不同的实体类生成:与表字段一一对应的实体类、Nhibernate 实体类、WCF 实体类,如下所示。 图表 6-1 实体类生成快速入口 6.1.2 实体类属性快速生成 做了很久的代码生成工具,基本上都是基于表生成实体类属性的,把数据 库表的信息拿出来,然后之乎者也后生成一个标准的实体类,包含字段、属性、 描述等东西。 不过后来在做一些非数据库的项目的实体类,还有一些不是基于表一一对 应关系的实体类,写这些字段属性的代码就显得比较乏味,那么是否有可能通 过输入一些简单的信息,就能构造出一个符合代码标准的实体类信息呢,技术 就是为了方便而诞生的,因此虽然 Database2Sharp 是基于整个数据库生成整个 框架代码的工具,我也整合了自定义实体类的生成功能,以求方便我们实际的 47 开发工作。 图表 6-2 实体类属性快速生成 6.2 数据库文档生成 6.2.1 数据库文档生成 很多时候,项目需要提供一份数据库设计文档,如果表很多,每次需要更 新这个文档,就是一项非常复杂、非常麻烦的事情,虽然技术含量不高,但是 很折腾人,而且也很耗费尽力。 如果能有工具自动生成符合《数据库设计说明书》格式的文档,那么肯定 为你节省很多宝贵的时间,你可以在进度上安排自己编写《数据库设计说明书》 的时间,而利用这些时间做一些有意义的事情,或者甚至是休闲,是不是很好 呢。 本代码生成工具生成的数据库设计文档,包括数据库表设计文档、存储过 程及视图的设计文档,很方便,效果如下所示。 48 图表 6-3 数据库文档生成操作 表数据的文档格式如下所示: 图表 6-4 数据库表文档效果 视图数据的文档格式如下所示: 49 图表 6-5 数据库视图文档效果 存储过程的文档格式如下所示: 图表 6-6 数据库存储过程文档效果 50 包数据的文档格式如下所示: 图表 6-7 Oracle 数据库包文档效果 6.3 自定义模板代码生成 6.3.1 自定义模板语法介绍 代码生成工具一直是很多从事开发人员的必备,一般开发人员都会选择一 款高效、适合自己开发模式的代码生成工具,我也不例外,我一直让我们的 Database2Sharp(http://www.iqidi.com/database2sharp.htm)代码生成工具围绕我们 的开发框架来生成代码,至今已经经过快 7 个年头的洗礼,主要是提供高效、 快速的一键生成整个项目框架源码的操作。 代码生成工具 Database2Sharp 自一开始,就采用基于模板方式的代码生成 方式,这样提高生成效率,并且减少维护成本(相对某些硬编码代码生成的方 式更优),方便用户对模板进行适当的修改等特点,不过虽然是提供了模板修改 的功能,但是由于在工具的主界面上,并未提供对自定义模板文件的管理,因 此以前的版本一直没有完成用户自定义模板管理维护的功能,本次版本更新就 是弥补这一不足,发挥模板应有的魅力和功能。 在实际开发当中,自定义模板生成是很多代码生成工具生成代码的重要补 51 充,例如有些项目代码片段需要(例如控件赋值语句,或者控件数据显示语句 等),如果能通过自定义模板方式,利用模板引擎的灵活特点,以及已有数据库 的结构信息,就很方便生成重复性强、有一定规律的代码。 因此,本次 Database2Sharp 版本更新,主要就是提供一个对自定义模板管 理,方便利用自定义模板灵活、高效的特点,并且利用后台数据库表、字段等 信息,为实际的项目代码片段生成服务,本次还调整了整体的软件界面布局, 利用成熟的 Weifenluo 布局控件,更好展示多文档的信息。 我们来看看自定义代码生成模块的功能是如何实现的,首先提供一个自定 义模板列表进行维护,可以通过右键菜单进行添加、修改、重命名、删除等操 作,模板代码可以进行【直接执行模板】和【选表进行代码生成】两种方式。 利用【选表进行代码生成】方式,可以很好利用后台的数据库表、字段等 信息,结合模板生成高效的代码,如下所示。 52 另外,为了方便大家对模板引擎 NVelocity 的了解,在软件工具安装的时 候,附带了几个常见的例子,如下所示。 例子的代码大致如下所示,主要是让大家快速了解 Nvelocity 的模板语言 VTL 的使用。如果对模板引擎更加深入的了解,可以查看我之前的随笔《强大 的模板引擎开源软件 NVelocity》进一步了解。 遍历及注释,赋值语句例子。 53 ##Foreach语法操作函数 #set( $criteria = ["name", "address"] ) #foreach( $criterion in $criteria ) $criterion #end ##注释操作 注释 单行注释 ## This is a single line comment 多行注释 #* Thus begins a multi-line comment. Online visitors won't see this text because the Velocity Templating Engine will ignore it. *# 条件结构的例子 ##此处为注释说明 ##简单例子(主要规则:引用以$开头用于取得什么东西,而指令以# 开始用于做什么事情) ##在VTL中,所有变量标识符的开头要加上$字符,如$Name,也可以用一种更加明确的方 法表示,例如${name}。 #set($foo = false) #if ($foo) this is true #elseif ($bar) this is false #elseif (true) this should be followed by two blank lines #end ## this is a single line comment #* this is a multi line comment #if ( *# #set($user = "jason") 54 #set($login = false) #set($count = 5) #if ($user == "jason") the user $user is logged in! #end #if ($count == 5) the count is 5! #end #if ($login == false) the user isn't logged in. #end #if ($count != 3) \$count is not equal to 3 #end 宏脚本例子 ## #macro 脚本元素允许模板设计者在VTL 模板中定义重复的段。 ## Velocimacros 不管是在复杂还是简单的场合都非常有用。 ## 下面这个Velocimacro,仅用来节省击键和减少排版错误,介绍了一些NVelocity宏 的概念。 ## 可以带参数,参数放在宏名称的后面,空格隔开 #macro( d ) #end #d() 以及一些常用的赋值及数据显示代码片段 /// /// 初始化 /// /// 实体类信息 private void InitData(${ClassName}Info info) { #foreach($ColumnInfo in ${TableInfo.ColumnList.Values}) #if(${ColumnInfo.AutoIncrement} == false) 55 #if(${ColumnInfo.NetType} == "System.String" ) this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()}; #elseif(${ColumnInfo.NetType} == "System.DateTime") this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()}.ToShortDateString(); #else this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()}.ToString(); #end #end ##endif #end } /// /// 获取数据 /// private ${ClassName}Info GetData() { ${ClassName}Info info = new ${ClassName}Info(); #foreach($ColumnInfo in ${TableInfo.ColumnList.Values}) #if(${ColumnInfo.AutoIncrement} == false) #if(${ColumnInfo.NetType} == "System.Decimal" ) info.${ColumnInfo.Name.Alias.ToCapit()} = Helper.SafeConvertDecimal(this.txt${ColumnInfo.Name.Alias.ToCapit ()}.Text); #elseif(${ColumnInfo.NetType} == "System.DateTime") info.${ColumnInfo.Name.Alias.ToCapit()} = Helper.SafeConvertDate(this.txt${ColumnInfo.Name.Alias.ToCapit()} .Text); #else info.${ColumnInfo.Name.Alias.ToCapit()} = this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text; #end #end ##endif #end } 当然,了解这些可能还不够,还需要了解模板后台,能够利用的数据属性 等信息,包括数据库、表、字段等相关的属性,方便在模板引擎中进行调用, 生成更加强大的代码片段。 软件安装后,有一个帮助文件,是提供给开发者进行了解模板后台数据的 相关属性和方法的,如下所示。 56 运行后如下所示: 除了以上新增的功能外,一键生成基于我们的 Winform 框架结构的项目代 码,是最为重要的功能,可以体验一下。另外,代码生成工具生成的数据库文 档,快速生成实体类信息等模块,也是开发非常常用的功能,如果想了解更加 关于我们的代码生成工具的信息,可以参考我博客里面的标签【代码生成工具】。
还剩57页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

xiaodjy

贡献于2016-04-21

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf