ADO.NET与ORM的比较(2) NHibernate实现CRUD

说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是 Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操 作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据。 在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外, 还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的 ORM持怀疑态度,你还可以使用来自微软的实现、根正苗红的Linq或者 EntityFramework。

大部分从早期就开始使用.NET开发的程序员可能对ADO.NET有种迷恋,使用 ADO.NET可以充分将我们早期的SQL知识发挥得淋漓尽致,并且出于对性能的考虑 ,有些人对.NET中的ORM还保持一种观望态度,包括我自己也是这种态度。不过 即使在实际开发中不用,并不代表我们不能去了解和比较这些技术,任何事物的 出现和消亡总有其原因的,我们可以了解它们的优点和长处。所以本人抽出了几 个周末的时间分别用ADO.NET、NHibernate、Linq和 EntityFramework来实现对 数据库单表数据的创建、读取、更新和删除操作,也就是所谓的CRUD (C:Create/R:Read /U:Update/D:Delete)。

通过实现相同功能的比较,大家自己判断那种方式更适合自己。需要说明的 是,如果在VS2008中使用 EntityFramework就需要安装VS2008SP1。

在本篇周公将讲述如何利用NHibernate实现CRUD功能,为了便于对比,在本 次中采用与上次同样的数据库和表,并且也实现同样的功能。NHibernate是一个 ORM框架,所谓ORM就是Object Relational Mapping,是一种将关系型数据库中 的数据与面向对象语言中对象建立映射关联的技术,我们可以想操作对象一样操 作数据,NHibernate将我们对对象的变更保存到数据库中去,并且还负责以对象 的方式从数据库中查询数据,这样就可以使开发人员从处理SQL和ADO.NET上节省 一些时间和精力用于处理业务逻辑。

1、准备

首先我们需要从网上下载NHibernate框架,这个可以到它的官方网站 www.nhibernate.org上去下载,在周公写这篇文章的时候从网上能下载到的最新 版本为2.1.2.GA。如果下载的是压缩包,请将压缩包解压,将会看到四分文件夹 ,它们的名称和作用分别如下:

Configuration_Templates:存放NHibernate连接数据库的配置文件的示例, 在这个文件夹下分别有连接Firebird、SQL Server、MySQL、Oracle、 PostgreSQL和SQLite数据库的配置示例,可以根据实际所使用的数据库选择示例 中的代码并更改其中的数据源即可。

Required_Bins:存放NHibernate运行过程中所需要的类库文件,其中还包含 了第三方的开源日志框架 Log4Net,在不确定到底会使用那些类库的条件下建议 将这个文件夹下所有的dll文件拷贝到项目的bin文件夹下。

Required_For_LazyLoading:存放延时加载特性支持所需的框架文件,在这 个文件夹下提供了三种实现,选择一种将其下所有的dll文件拷贝到项目所在的 bin文件夹下。在本示例中选择了 Castle。

Tests:存放测试用文件,在此文件夹下还有一个名为ABC.hbm.xml的文件, 这是一个数据表对应的配置文件的示例,在这个文件夹下的文件我们都用不着, 不过在以后我们会用到.hbm.xml文件。

2、创建项目

我们创建一个项目,项目类型可以根据情况选择,因为我今后要使用NUnit来 对项目进行单元测试,所以创建的类库项目。

创建项目成功之后将如下文件拷贝到项目的bin目录下:

Antlr3.Runtime.dll

Castle.Core.dll

Castle.DynamicProxy2.dll

Iesi.Collections.dll

log4net.dll

NHibernate.ByteCode.Castle.dll

NHibernate.dll

然后在项目中添加对这些dll的引用,如下图所示:

时间: 2024-08-30 21:21:12

ADO.NET与ORM的比较(2) NHibernate实现CRUD的相关文章

ADO.NET与ORM的比较(4) EntityFramework实现CRUD

说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是 Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操 作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据. 在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外, 还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的 ORM 持怀疑态度,你还可以使用来自微软的实现.根正苗红的Lin

ADO.NET与ORM的比较(3) Linq to SQL实现CRUD

说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是 Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操 作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据. 在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外, 还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的 ORM 持怀疑态度,你还可以使用来自微软的实现.根正苗红的Lin

ADO.NET与ORM的比较 (1)ADO.NET实现CRUD

说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是 Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操 作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据. 在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外, 还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的 ORM持怀疑态度,你还可以使用来自微软的实现.根正苗红的Linq

.Net——Nhibernate实现CRUD

               最近用到SSH(spring+struct+hibernate),从java里面的hibernate,不自觉联系到.net里面的Nhibernate.         下面来简单聊下Nhibernate.     一,引入Dll                主要有三个:                  基本的就这三个,其他的,比如Castle.Core.dll,Castle.DynamicProxy2.dll,Iesi.Collections.dll,log4n

NHibernate之旅(1):开篇有益

本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 学习NHibernate有一段时间了,打算做个阶段性总结,就萌生了这个系列,这个系列参考NHibernate官方文档和Steve Bohlen的NHibernate之夏视频教程.作为开篇,首先了解多少人在使用NHibernate,先搞清楚NHibernate是什么?学习NHibernate的一些资源.也欢迎大家加入NHibernate中文社区. 这个系列我使用NHib

求教,ORM是什么?能用从C#中说明么?

问题描述 我准备开始学ASP.NET.看的传智播客的视频学,里面有讲学习ASP.NET的基础,就是要学ORM.但我之前没有接触到过这个名词.所以很难理解.当然,我也会百度,不过,百度出来的东西看不懂啊==================百度到的内容=================对象关系映射(英语:ObjectRelationalMapping,简称ORM,或O/RM,或O/Rmapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说,它其实是创建了一

艾伟_转载:我对NHibernate的感受(1):对延迟加载方式的误解

NHibernate是.NET平台上最著名的ORM框架,虽说出身于Java平台上的Hibernate,但是从外部看来这几乎就是一个.NET平台上的原生产品:有自己的社区,有自己的用户,有自己的商业支持,有利用C#特性的独立扩展.它不像Lucene.NET那样,一眼就能看出浓重的Java气息,Java的命名方式等等.我用NHibernate时间不长,而NHibernate的复杂程度也决定了我无法像了解LINQ to SQL那样容易.不过在使用了一段时间过后,还是对它有一定体会.有欣喜,有误解,也有

我对NHibernate的感受(1):对延迟加载方式的误解

NHibernate是.NET平台上最著名的ORM框架,虽说出身于Java平台上的Hibernate,但是从外部看来这几乎就是一个.NET平台上的原生产品:有自己的社区,有自己的用户,有自己的商业支持,有利用C#特性的独立扩展.它不像Lucene.NET那样,一眼就能看出浓重的Java气息,Java的命名方式等等.我用NHibernate时间不长,而NHibernate的复杂程度也决定了我无法像了解LINQ to SQL那样容易.不过在使用了一段时间过后,还是对它有一定体会.有欣喜,有误解,也有

存储过程传言

    这篇随笔由于出差拖了很久,一时也没整理好该写些什么.在google搜了下"存储过程 优劣"关键字,资料并不多,出现了一篇关于来至51cto的关于存储过程的优缺点的文章,具体这里也不指出了.看见文章中对存储过程的几个辩解,个人不敢苟同,个人已经很仔细的看了文章的时间是2011年,如果在更前写年成的话,个人觉得完全能够理解.所以有了这篇,存储过程的一些传言.     1:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL 语句每执行一次就编译一次,所以使