摘要:CodeSmith是很多.NET开发人员至爱的开发辅助工具,它能够使开发人员从大量枯燥无味的重复编码中解脱,集中精力解决实际业务问题和技术问题。本文将介绍如何将CodeSmith用于Windows Mobile项目,以SQL Server Compact Edition数据库作为代码生成的依据生成项目代码。
什么是代码生成器?
代码产生器是产生式编程(Generative Programming)在实际应用中的一种产物。它以系统建模为基础,通过抽象各种系统间的共性与特性,利用代码模板和组件重用技术,自动产生满足客户需求的软件产品。从而降低成本,减少软件推向市场的时间,并且保证更好的产品质量。最终取得规模经济和范围经济的优点。2004年我还在大学读书的时候曾开发过一个基于模板引擎的代码生成器——RapidTier,当时这个作品还获得了广东省高校杯软件设计大赛的二等奖。在.NET的世界里,目前最有名的代码生成器当属CodeSmith和MyGeneration。这两款代码生成器都是基于模板引擎的,使用起来方便灵活,而且模板资源非常丰富。
CodeSmith 简介
CodeSmith 是一个基于模板的代码生成器,你可以利用它来生成任何文本语言的代码。CodeSmith 生成的代码可以通过模板的属性来定制。CodeSmith 模板的语法跟 ASP.NET 非常相似,你可以在模板中使用 C# 或 VB.NET 控制代码的生成。通常,开发人员利用CodeSmith根据SQL Server或Oracle等大型数据库生成各种项目代码(如:存储过程、数据访问层、业务逻辑层、表现层等)。今天将向各位介绍如何利用CodeSmith为移动数据库SQL Server Compact Edition生成Windows Mobile项目的代码。
配置SchemaProvider
CodeSmith通过SchemaProvider来支持各种数据库。在CodeSmith Professional 4.1.2安装后,默认只支持SQL Server、Oracle、Access、MySQL等数据库类型。如果需要支持其他类型的数据库,可以到网上搜索相关数据库的SchemaProvider实现,或者自己手动编写代码实现ISchemaProvider接口。
最近,我从网上找到了SQL Server Compact Edition(3.1)的SchemaProvider实现,经过代码调整和调试,现在跟大家分享一下。可以从这里下载到这个SchemaProvider相关的DLL,下载后将其解压,并将SchemaExplorer.SqlCeSchemaProvider.dll和System.Data.SqlServerCe.dll文件复制到CodeSmith的SchemaProvider目录下(C:\Program Files\CodeSmith\v4.1\SchemaProviders)。
配置数据源
启动CodeSmith,点击左边停靠的Schema Explorer窗口上方点击“Manage Data Sources”工具栏按钮,打开Data Source Manager窗口。
Data Source Manager窗口打开后,点击Add按钮添加新的数据源。在Data Source窗口中,数据源名称(Name)输入“Northwind sqlce”,提供程序类型(Provider Type)选择SqlCeSchemaProvider,连接语句输入“data source=c:\Northwind.sdf”,假设你已经将SQL Server Compact Edition自带的Northwind.sdf数据库复制到C盘根目录了。
你可以通过点击Test按钮测试一下是否正常连接,然后点击OK保存数据源,回到Data Source Manager窗口,现在看到多了一个叫“Northwind sqlce”的数据源了。
“Northwind sqlce”数据源已经添加成功,点击Close按钮关闭Data Source Manager窗口。回到Schema Explorer窗口,展开“Northwind sqlce”数据源,浏览各个表的字段和属性。
生成代码
在CodeSmith右边停靠的Template Explorer窗口打开自带的模板“CodeSmith 4.1 Samples\ActiveSnippets\CSharp\TableProperties.cst”。这个模板可以从一个数据库的表的所有字段生成对应的实体类的所有属性(Property)定义代码。
TableProperties.cst
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><%--
Name:DatabaseTableProperties
Author:PaulWelter
Description:Createalistofpropertiesfromadatabasetable
--%>
<%@CodeTemplateLanguage="C#"TargetLanguage="C#"Debug="False"Description="Createalistofpropertiesfromdatabasetable."%>
<%@PropertyName="SourceTable"Type="SchemaExplorer.TableSchema"Category="Context"Description="Tablethattheobjectisbasedon."%>
<%@MapName="CSharpAlias"Src="System-CSharpAlias"Description="SystemtoC#TypeMap"%>
<%@AssemblyName="SchemaExplorer"%>
<%@ImportNamespace="SchemaExplorer"%>
<%foreach(ColumnSchemacolumninthis.SourceTable.Columns){%>
private<%=CSharpAlias[column.SystemType.FullName]%>_<%=StringUtil.ToCamelCase(column.Name)%>;
public<%=CSharpAlias[column.SystemType.FullName]%><%=StringUtil.ToPascalCase(column.Name)%>
{
get{return_<%=StringUtil.ToCamelCase(column.Name)%>;}
set{_<%=StringUtil.ToCamelCase(column.Name)%>=value;}
}
<%}%>
模板被打开后,在CodeSmith右边停靠的Properties窗口选择SourceTable属性,点击旁边的“...”按钮浏览并选择一个Northwind.sdf数据库的表。这里我们选择Categories表,并点击Select按钮确定。
现在可以按F5生成代码了,生成的结果如下所示:
生成的代码
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->privateint_categoryID;
publicintCategoryID
{
get{return_categoryID;}
set{_categoryID=value;}
}
privatestring_categoryName;
publicstringCategoryName
{
get{return_categoryName;}
set{_categoryName=value;}
}
privatestring_description;
publicstringDescription
{
get{return_description;}
set{_description=value;}
}
privateSystem.Byte[]_picture;
publicSystem.Byte[]Picture
{
get{return_picture;}
set{_picture=value;}
}
你还可以选择其他的表或其他模板生成代码试一试,体验一下CodeSmith的强大之处。
总结
通过上面的介绍和示例演示,相信大家都认同CodeSmith确实很好很强大。当然,这里只是演示了一个很简单的例子,你可以根据项目的实际需要自己编写模板,按自己的方式去生成项目代码。编写模板最快捷的方法就是基于现有比较类似的模板进行修改。CodeSmith之所以能够用于SQL Server Compact Edition数据库的代码生成,除了前面提到的它通过SchemaProvider支持各种类型的数据库,还有一点很重要的就是SQL Server Compact Edition支持桌面平台,如果是SQL Server Mobile就没有办法做到这一点了。
相关下载:SqlCeSchemaProvider.rar
作者:黎波
博客:http://upto.cnblogs.com/
日期:2008年3月29日
分享到:
相关推荐
2、SQL 包括使用Sql Server数据库时三层代码的自动生成。 3、Procdure 包含一个根据表生成存储过程的模板 4、Model 包含一个一次生成所有Model中实体类的模板。 CodeSmith模板可以由用户自定义。其语法与C#语法类似...
”或空格,会自动清除,每一字段生成一个对应的属性,同样会去除“_”和空格,表中的外键字段除生成一个对应属性外,还会生成一个外键实体属性,如class_id,除生成ClassId属性外,还生成了一个类型为StudentClass的...
【SqlServer三层架构模板】是一种高效开发模式,它将应用程序分为数据访问层、业务逻辑层和表示层,以实现代码的高可复用性、模块化和低耦合性。Codesmith是一款强大的代码生成工具,它可以帮助开发者自动化生成这三...
在SQL Server环境中,利用CodeSmith可以快速生成与数据库交互的数据访问层(DAL)、业务逻辑层(BLL)以及表现层(UI)代码,构建出经典的三层架构模式。这种架构将数据处理、业务规则和用户界面分离,使得代码更...
在本案例中,我们关注的是一个基于SQL Server数据库的CodeSmith模板,这个模板专为三层架构设计,适用于那些需要构建数据访问层、业务逻辑层和表现层的项目。 首先,三层架构是一种常见的软件设计模式,它将应用...
"codesmithprofessional SQL三层 代码生成 模版"就是这样一个工具,它专为ASP项目的开发设计,旨在通过自动化的方式生成三层架构的代码,从而节省程序员大量的手动编码时间。三层架构是一种常见的软件设计模式,它将...
CodeSmith5.0.1.4983连接SqlServer2005――不允许远程连接
CodeSmith是一款强大的代码生成工具,尤其在数据库相关的SQL脚本生成方面表现突出。它允许开发者通过自定义模板来快速创建复杂的SQL脚本,极大地提高了开发效率。以下是对CodeSmith使用和SQL脚本生成模板的详细解释...
CodeSmith 生成代码工具CodeSmith 生成代码工具CodeSmith 生成代码工具CodeSmith 生成代码工具CodeSmith 生成代码工具CodeSmith 生成代码工具CodeSmith 生成代码工具CodeSmith 生成代码工具
参考PetShop编写的C#语言的SQLServer数据库模板。 SQLServer数据类型部分适应SQLServer2008的新类型。 拥有SQLUtility、SQLFactory、Model、IDAL及增、删、改和获得Model的存储过程。
针对“Sqlserver转C#代码生成”的主题,我们主要关注如何从SQL Server数据库中获取表结构信息,并自动生成对应的C#模型类(Model)和数据访问层(DAL)代码。 1. SQL Server数据库操作: - ADO.NET:C#中常用的...
CodeSmith的灵活性在于,用户不仅可以使用内置的Nhibernate模板,还可以根据项目需求自定义模板,实现特定的代码生成逻辑。例如,如果项目中需要特定的验证规则或扩展属性,可以通过修改模板来满足这些需求。同时,...
本项目是基于 CodeSmith 的一个开源代码生成器,专注于从数据库中自动生成相关代码,以提升开发效率。 首先,我们要理解 CodeSmith 的工作原理。CodeSmith 使用模板语言(CSTL)来编写模板,这些模板可以包含任何可...
"codeSmith自动生成三层中的代码"这一主题表明我们将探讨如何利用CodeSmith来生成软件架构中的三层架构代码,包括表示层、业务逻辑层和数据访问层。 首先,三层架构是一种常见的软件设计模式,它将应用程序分为三个...
CodeSmith好用的代码生成器 代码生成器 自定义
CodeSmith是一款强大的.NET代码生成工具,它允许开发者通过自定义模板快速生成各种代码,从而提高开发效率和代码质量。在.NET 2.0时代,CodeSmith就已经被广泛应用于项目开发中,尤其是对于三层架构(数据访问层、...
总的来说,codesmith代码模板为开发者提供了强大的代码生成能力,它允许根据项目需求定制模板,生成规范、一致的代码,有助于提升开发效率,降低错误率,使得团队可以更专注于业务逻辑和创新性工作。同时,使用模板...
CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成...
本文将深入探讨如何利用CodeSmith在VS2005环境下生成项目和后台代码。 首先,了解CodeSmith的基本概念是必要的。CodeSmith是一个基于模板的代码生成器,它允许用户通过编写模板文件来定义代码结构。这些模板可以是...
在本案例中,我们关注的是如何利用CodeSmith来批量生成SQL Server数据库表的创建脚本。 标题"CodeSmith的批量生成数据库表创建脚本的模板"暗示了我们将探讨如何使用CodeSmith的模板功能来自动化生成针对SQL Server...