15分钟内快速构建数据访问层(翻译)

15分钟内快速构建数据访问层

下载链接

 

介绍

通过本文你可以学习到如何利用微软企业库、CodeSmith.NetTiers模板在少于15分钟内快速构建数据访问层。

从现在起我们把数据访问层(Data Access Layer)简称为DAL,它是程序中和数据库进行交互的层。手写DAL层代码是非常枯燥无味,浪费时间的重复活动,还有可能在编译程序的时候出现好多漏洞。

我们需要确保已经安装了SQL ServerNorthwind数据库,但是这个例子也可以运行在其它任何数据库上。当然了,看完文章后你将不会再单调无味的浪费时间去为你的应用程序写DAL层代码了,而是更快、更简单。

如果你看完这篇文章你将会在1分钟内使用最佳实践来创建一个数据访问层(其它14分钟是用来第一次下载所需的软件)。

代码生成概述

代码生成,或者使用工具软件生成代码,不是一个新的概念。实际上,代码生成已经很普遍了。本篇文章我们用CodeSmith来生成DAL层的代码以及T-SQL脚本。

CodeSmith是一个开发者常用工具,它可以使用模板来输出你想要的格式代码。你可以使用模板来生成任何你想要的代码,功能特别强大,本文就是用了一个.NetTiers模板。

 

第一步 安装软件

首先我们就是下载CodeSmith.NetTiers,其中前者是30天试用版(当然网上也有破解工具,当前最新版是3.2,是for .net 2.0的,我们下载3.1或者3.0版就行)

下载并安装CodeSmith

http://www.codesmithtools.com/

CodeSmith已经内置了好多模板,并且我们一会儿会让它包含进我们需要的.NetTiers模板,安装好CodeSmith,我们下载.NetTiers模板库。

CodeSmith下载.NetTiers模板库

http://cstemplates.sourceforge.net

在上面的地址里下载最新的.NetTiers模板库安装文件。

最后一步就是确保你安装了SQL Server数据库并且准备好连接到数据库的连接字符串。

第二步– CodeSmith

打开CodeSmith,我们先快速熟悉一下它的用法。

前文介绍过CodeSmith是一个模板驱动的工具。在CodeSmith的右边有一个模板浏览器窗口,它可以让你快速使用你已经安装的模板,见下图。

 

我们先来学习一下使用模板,双击Hashtable.cst模板。

Hashtable.cst是用来生成强类型集合的hashtable类型的模板。我们再来快速看一下CodeSmith的另一个窗口,属性窗口。

 

属性窗口可以让你来设置模板的属性,如果使用Hashtable.cst模板,我们需要设置ClassName,ItemTypeKeyType属性。举个例子,我们要创建一个Person对象的集合,并且使用integer类型键来访问的PersonCollection集合。你需要把在属性窗口里把ClassName设置成PersonCollection,ItemType设置成PersonKeyType设置成int。点击工具栏里的run按钮,就可以生成你需要的强类型集合的源码了。

你看一下Hashtable.cst你就会发现它有点儿像ASP.NET的语法,其实CodeSmith模板就是使用类似ASP.NET的形式来生成你想要的代码,只不过是ASP.NET是用来生成HTML代码的,而CodeSmith是用来生成你需要的源代码的。

你要记住的一点是CodeSmith不会自动生成你需要的代码,但你可以自己定义模板来生成所有你想要的代码。

第三步生成数据访问层

我们已经基本理解了CodeSmith的用法,现在来演示如何使用.NetTiers模板。

记住,CodeSmith允许你快速的生成代码,并且很少会有手写代码造成的错误。.NetTiers模板生成的代码也是微软推荐的数据访问的最佳实践。

First we need to add the .NetTiers templates to the CodeSmith Template Explorer:

首先我们需要把.Nettiers模板添加到模板浏览器窗口。

  1. 在模板浏览器点击打开目录图标并浏览包含模板的目录
  2. 选择.NetTiers的安装目录,我的安装目录是是C:\Program Files\SerialCoder\NetTiers 0.9.2 - Caribert\Templates\
  3. 选择后就会在模板浏览器窗口里添加一个文件夹,展开它并选中NetTiers.cst模板
  4. 现在我们来配置数据连接字符串,打开NetTiers.cst模板,在属性窗口里点击SourceDataBase属性后面的对话框。
  5. 在这个窗口里你可以新创建一个自己的数据源,如下图。
  6. 测试一下连接是否成功,点击OK按钮关闭此窗口,然后选择你刚才创建的数据源名字。
  7. 最后,这是EntireDatabase属性为TrueNameSpace属性为Demo,OutputDirectory属性为你想输出的目录,当然你需要提前创建好要生成代码的目录。

至此,你已经完成了NetTiers.cst模板的所有属性设置,它看起来应该如下图。

当然我们没有告诉你所有的关于.NetTiers的属性设置,但是对于生成扑通的DAL层代码已经足够了,点击工具栏里Run按钮(小箭头)就可以生成代码了。

注意:你建立的数据表一定要设置主建哦,如果没有主建,这个表就不会生成响应的代码,你点了Run按钮后会弹出一个报表,你可以看到都生成了哪些表的相关代码。

第四步查看生成的代码

Visual Studio .NET打开你刚才设置的代码输出目录里(我设置的是c:\NetTiers\Northwind_Demo\ directory)的Demo.sln解决方案。

我们来快速看一下解决方案包含的项目和文件。

You should find 3 projects within the solution:

你会看到有解决方案里包含3个项目

  • Demo此项目包含了你要和数据库交互的主要的类。
  • Demo.DataAccessLayer 此类库包含了实际的数据库操作执行代码
  • Demo.DataAccessLayer.SqlClient此类库包含了微软推荐的访问数据库的设计模式和最佳实践(Microsoft Patterns & Practices classes)的代码。

第五步编译、完成

接下来,我们用Visual Studio来编译项目。

祝贺你,你现在已经有了一个使用微软推荐的访问数据库的最佳实践的数据库访问层

现在你就可以在其它项目里使用你的DAL层了,举个例子,你需要获取,更新和删除一条员工的记录。

using Demo.DataAccessLayer.SqlClient;
 
// Select by primary key
Employee employee = SqlDataRepository.EmployeeProvider.GetByEmployeeID(13);
employee.FirstName = "John";
employee.LastName = "Doe";
 
// Save changes
SqlDataRepository.EmployeeProvider.Save(employee);
 
// Delete record
SqlDataRepository.EmployeeProvider.Delete(employee);
    

关于更多生成DAL层的信息,参考下面的.NetTiers的链接。

http://cstemplates.sourceforge.net/nettiers-manual-v1.html

记住,你的数据访问层的代码都是通过模板生成的。如果你修改了数据库的结构,你只需要简单的通过模板重新生成一下DAL层代码就行了。(当然了,如果你在重新生成代码前修改了一下生成的代码,再重新生成就给你覆盖了,这个怎么办呢,比较麻烦,你可以写一个继承自自动生成类的子类,在那里重写相关的方法,或者在.NET 2.0里使用多文件类)另外你可以根据你的想法扩展你的模板,包括注释,命名约定,模式等等。

小节

 

CodeSmith可以根据你的模板生成任何你想要的代码,本文向你演示了如何在短短几分钟内使用.NetTiers模板来在你应用程序中创建使用访问数据库最佳实践的数据库访问层。

你可以在这里查看视频演示:

http://community.codesmithtools.com/r.ashx?id=1

CodeSmith 3.1的一个新特征就是可以计算代码行。它可以保守的计算CodeSmith生成的代码。

 

 


这里可以看到.NetTiers生成了91,559行代码。假设一个很厉害的程序员一小时可以写60行代码,写完这些代码需要1800小时。加入一个厉害的程序员你每小时要付给它接近60美元,CodeSmith.NetTiers帮你公司节省了1,800小时的时间和109,000美元。(好像夸张了点儿哦。)

现在获取一个CodeSmith并发挥它的威力吧。

CodeSmith.NetTiers 相关资源

如果你对CodeSmith有一些问题,可以访问它的社区来获取解决: http://community.codesmithtools.com. CodeSmith社区里有好多人写的模板并共享给每个人下载,你可以去看看有没有自己需要的。

如果你想想购买CodeSmith,可以访问它的网站http://www.codesmithtools.com. 你可以获取一个授权来免除30天试用的限制。如果你还有问题,可以给它们的售后支持邮箱发email sales@codesmithtools.com.

如果你对.NetTiers模板有问题,可以访问下面的论坛:

http://community.codesmithtools.com/forums/16/ShowForum.aspx

英文链接:

Build a Data Access Layer in less than 15 minutes

http://community.codesmithtools.com/blogs/tutorials/archive/2006/02/13/nettiers.aspx

另外借此贴调查一下各位的持久层用的都是什么呀,NHibernate, ibatis.netDAAB,SPLSQLHelper,CMP还是其它的,我想以后在项目中主要用一下企业库里的DAAB,不知道适合适合企业开发,它有那些缺点呀。

 

 

 

 

posted on 2006-02-16 11:50 蛙蛙池塘 阅读(4745) 评论(20)  编辑 收藏 引用 网摘

评论

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-16 11:56 Terrylee

DAAB,SQLHelper也是持久层???  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-16 12:43 蛙蛙池塘

DAAB,SQLHelper不是也是管数据访问的吗,那啥算持久层呀,起码算持久层的一部分吧。  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-16 13:40 chnking

CodeSmith 和 微软企业库中的数据访问部分,这两个哪个更好些?  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-16 14:49 C# hack

不推荐使用该方法,DotNetNuke的数据层使用的微软企业库中的数据访问部分,更加自动化  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-16 15:54 kid_li

试了试生成数据访问层的代码,想看看别人是如何写的,发现他们大量的使用面向对象的接口和继承。所以每个cs文件中的代码量就很少。但是生成了那么多的文件开始看起来觉得很复杂。不过生成的是一个完整的项目,很佩服CodeSmith的编写者和此模版的编写者  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-16 17:44 半梦半醒之间

这篇文章是codesmith网站上面的。
我记得有一篇文章是讲使用codesmith,利用.NetTiers的模板和Enlib2来生成数据访问层的文章。我对这方面知之甚少,但是感觉.NetTiers和Enlib没有什么矛盾。
Enlib是通过比较通用的代码,来实现二进制级别的重用。一份Enlib代码。
模板的方法,通过代码的共性来实现代码级别的重用。多份程序代码。  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-16 20:44 蛙蛙池塘

@C# hack 你是说什么意思呀,这文章里使用的也是和ENTLIB里的DAAB差不多吧,也是微软推荐的模式呀。现在持久层框架太多了,能说说他们之间的区别吗?  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-16 20:46 蛙蛙池塘

不太理解“Enlib是通过比较通用的代码,来实现二进制级别的重用。一份Enlib代码。模板的方法,通过代码的共性来实现代码级别的重用。多份程序代码。
”这句话,怎么是二进制的重用呀,ENTLIB是说微软企业库吗,本文就是用的企业库里的DAAB吧。  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-16 22:01 Voyage

总的来说.NetTiers非常的不错,看过他的视频QuickStart,的确只能用震撼来形容当时的感觉。但实际使用后还是感觉有不尽人意的地方。
比如实体提供的Find方法不能正常使用,通过自定义的存贮过程生成的实体方法被处理为void的......

关于sp的返回类型和生成的方法返回值,文档是这样描述的
if sp rowset == table rowset then method return an EntityCollection
if sp rowset == one value (ex: int, varchar, etc.) then method return a scalar value
if other rowset then method return void
可是我写的存贮过程是返回一个output 参数的,nettiers还是把方法生成为void的
有使用过nettiers的朋友可以指点一下吗?  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-17 08:12 一滴水

学习,看看别人的代码怎么写和自己又什么不同:)  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-02-17 13:44 半梦半醒之间

我是看了上面的回复写了那些几句,可能是我说得不清楚吧。
我想说的意思是微软的企业库是用来通过调用的方式来使用的,虽然有源码可修改,但实际需要的是编译后的dll就可以了,源码是用来留下扩展和修改的空间的。所以是“二进制级别的重用”。
codesmith这种能够模板工具,是抽象程序之间的共性来生产代码,然后编译使用的。所以是“代码级别的重用”。生成数据访问层的代码是其中的一个应用而已。

我很喜欢模板的方式。给我们复用自己和其他人代码创造了方便条件。  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-03-13 15:25 心只有你

请问各位兄台:
在下按照 蛙蛙池塘 兄的指示用codesmith3.1 + 最新的 .NetTiers模板生成了DAL层,但是把它们引入实际的ASP.NET项目中就会有下面的错误。

@"Invalid section name. The section 'netTiersConfigData' does not exist in the requested configuration file 'D:/firstall/web.config' or the file 'c:\winnt\microsoft.net\framework\v1.1.4322\Config\machine.config'. Make sure that the 'enterpriseLibrary.configurationSections' configuration section exists in one of the files and that the section 'netTiersConfigData' is defined."

小弟不得其解,望各位有识之士指教!!!  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-03-13 15:27 蛙蛙池塘

你得配置web.config,nettiers安装了之后有一个entlib的配置小工具,也有文档,你看看就知道了。  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-03-23 17:37 路路

请问各位兄台:
在下按照 蛙蛙池塘 兄的指示用codesmith3.1 + 最新的 .NetTiers模板生成了DAL层,但是把它们引入实际的ASP.NET项目中就会有下面的错误。

@"Invalid section name. The section 'netTiersConfigData' does not exist in the requested configuration file 'D:/firstall/web.config' or the file 'c:\winnt\microsoft.net\framework\v1.1.4322\Config\machine.config'. Make sure that the 'enterpriseLibrary.configurationSections' configuration section exists in one of the files and that the section 'netTiersConfigData' is defined."

我也是遇到这样的错误

更不解的是,生成代码当中,还有这么一个文件. NetTiers.Configuration.dll

这一个文件是做什么用的?有这样的一个DLL文件在里面,我还能放心的用他的代码码?
  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-05-27 19:19 cowbird

好文章

我也打算在实际项目中使用codesmith和netTirers.希望和大家一同交流

Msn:cowbird2002@hotmail.com  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-06-13 19:13 Activer

大家可以试一试MyGeneration

http://www.mygenerationsoftware.com/



  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-06-14 08:55 蛙蛙池塘

恩,有中文资料吗?
  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-06-19 08:52 Wu.Country@侠缘

我也在想做一个数据持久层的代码自成工具。
主要是对其它工具生成的代码感觉“不爽”。
或者是不习惯吧。  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-06-21 10:35 kegogo209

我用codesmith3.1 + 最新的 .NetTiers模板生成了DAL层,但在应用程序中调用时报以下错误,请兄台指教一下好吗?
未处理的“System.Configuration.ConfigurationException”类型的异常出现在 demo.dataaccesslayer.dll 中。

其他信息: Failed to load configuration files.
You may need to start the enterprise library configuration console to configure the nettiers application block.
Otherwise, check that the config files are deployed in the ouput folder (this can be done by a post build event:
copy "$(ProjectDir)*.config" "$(TargetDir)")
  回复  更多评论   

# re: 15分钟内快速构建数据访问层(翻译) 2006-08-03 12:47 kegogo209

不知为什么我在Sql2005中使用它,生成代码后就报错,在sql2000没问题,有没有高手能帮我解决,在此谢过.我的邮箱是kegogo-209@yahoo.com.cn  回复  更多评论   

posted on 2006-12-17 10:14  疯狂的木头  阅读(377)  评论(0)    收藏  举报

导航