技术开发 频道

ASP.NET中NHibernate的非常好的实践


2.本文目的及概述


   这篇文章假设读者非常了解C# 和 NHibernate,具有数据访问对象/ 属性模式方面的知识,至少基本熟悉泛型方面的知识 。注意,这篇文章没有着重在使用NHibernate,相反的着重在把NHibernate和ASP.NET融合成一体。如果你刚刚熟悉NHibernate,我建议你先阅读ServerSide.net: Part 1 和 Part 2里的两篇介绍。(时刻关注Pierre Kuate即将出版的NHibernate in Action)。如果想广泛地了解数据访问对象模式(在例子内综合利用了),就去看J2EE's BluePrints catalog。尽管我一直使用了“数据访问对象”或者("DAO"),在Domain-Driven Design中它和Eric Evans' 属性"是可以互换的。我刚发现"DAO"更适合这个类型。

   为了用ASP.NET 2.0应用程序构建数据层,我决心完成下面的目标:

   • 应该忽视表现层和领域层是怎样与数据库通信的。你应该能够最小程度地修改你的数据与这些层相通信的方法。

   • 在不依靠现场的数据库时,商业逻辑应该很容易测试。

   • Nhibernate的特点,例如lazy-loading,在整个ASPX页面生命周期必须是可用的。

   • 应该综合利用.NET 2.0 泛型 ,以此来减轻重复代码。

   两个示例应用程序,演示了NHibernate如何和ASP.NET一起使用,同时满足上述目标:

   • 基本NHibernate例子:这个例子解释了通过使用NHibernate和ASP.NET以及单元测试和易理解但不能完全再使用的结构体系的基本原理。

   • "Enterprise" NHibernate例子:这个例子有一个结构上的sound grounding(此sound grounding使用被证明的设计模式,此模式允许你在几乎任何大小ASP.NET的项目尽快地重新使用构架)。这个例子也展示了带有ASP.NET的NHibernate以及“其它资料集”(包括与多个数据库通信,使用模式Model-View-Presenter),建立简单的网络服务,此网络服务使用NHibernate,以及与Castle Windsor整合。包含了为了与多个数据库通信的代码。这篇文章没有包含详细的解释,在CodeProject.com的文章:Using NHibernate with Multiple Databases有详细的解释。(注意这篇文章示例应用程序与with NHibernate 1.0x,albeit相一致,仍然可以应用基本方法。

    下面描述的就是:这个示例应用程序怎样处理前面描述的每一个设计目标。但是在述说操作细节之前,让我们直接进入,操作例子。

3.运行基本的NHibernate示例程序

    示例应用程序,使用现有的SQL Server 2005中的Northwind,显示和更新Northwind中的Customer信息. 示范lazy-loading, 程序会显示每个客户建立的单.在本地运行示例程序所要做的就是安装有.NET 2.0 Framework的IIS,包括Northwind 数据库的SQL Server 2005 (或者2000)。(因为SQL Server 2005不会默认的包括Northwind数据库),你可以从2000简单地给Northwind DB备份,把它加载在2005里)。这个例子是SQL Server 2000...的接口,相应地,简单地修改NHibernate配置设置。

    使基本NHibernate示例应用程序运行起来:
 
   (1) 解压示例应用程序到你选择的文件夹
   (2) 在IIS内,创建一个新的虚拟的目录。化名是BasicNHibernateSample,而且这个目录应该指向BasicNHibernateSample文件夹,在解压应用程序后,就建立了此文件夹。
   (3) 打开BasicSample.Web/web.config和 BasicSample.Tests/App.config,修改数据库连接符,并连接到微软SQL Server上的Northwind数据库。
   (4) 如果,你在运行IIS 7,注释 "compatible with IIS 6" 配置节并解构the "compatible with IIS 7" 配置节. 以此来修改web.config。
   (5) 打开你的网页浏览器输入http://localhost/BasicNHibernateSample/Default.aspx,,程序就可以运行了。
在“Extending the Basics to an "Enterprise" Solution”中讨论了创建"企业"例子及运行它的步骤。但是在这之前,你要沿着你前面的basic sample,我们来看这个应用程序是怎样一步步来实现我们的设计目标的。

0