当前位置: 首页 > news >正文

利用CodeSmith为SQL Server CE生成项目代码

摘要: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日

相关文章:

  • android隐藏微信好友,如何使用微信隐藏的恢复小技巧?微信好友恢复!
  • 梦里方知此身背
  • android指纹登录demo,Android指纹认证Demo源码
  • assicdoc 转换html,Swagger+spring boot 转换为html,PDF文件等
  • 英雄会开幕致辞--分享交流,开放协作带来共同繁荣的时代
  • html按钮过渡效果,css3_transition: 体验好的过渡效果。附 好看的按钮
  • Winsocket编程之TCP/IP体系结构
  • html 属于mvvm框架,vue.js是mvvm框架吗?
  • 部署ISA网络防火墙策略
  • 计算机英语 自我介绍,计算机专业学生面试英语自我介绍
  • Windows Embedded开发资源介绍
  • 异步socket的线程分配(C#)
  • 计算机专业期末试卷,计算机专业英语期末考试试卷(A卷)
  • 2021年考研计算机专业调剂,2021年考研东北石油大学谢坤课题组计算机专业接收调剂研究生的通知...
  • .NET企业级应用架构设计系列之应用服务器
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【RocksDB】TransactionDB源码分析
  • Asm.js的简单介绍
  • Git的一些常用操作
  • jQuery(一)
  • js对象的深浅拷贝
  • Objective-C 中关联引用的概念
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 聚类分析——Kmeans
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #define用法
  • (待修改)PyG安装步骤
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)ssm码农论坛 毕业设计 231126
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • @Autowired自动装配
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [《百万宝贝》观后]To be or not to be?
  • [Angular] 笔记 6:ngStyle
  • [BZOJ4010]菜肴制作
  • [C#]扩展方法
  • [Django 0-1] Core.Email 模块
  • [English]英语积累本
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [IE 技巧] 显示/隐藏IE 的菜单/工具栏
  • [IE9] IE9 RC版下载链接
  • [IE技巧] IE 中打开Office文件的设置
  • [IOI2007 D1T1]Miners 矿工配餐
  • [LeetCode周赛复盘] 第 312 场周赛20220925