看了许多人的文章,将Ado.net 与NHibernate看作类似的东西,频繁将两者进行比较。对于那些朋友的观点,我不认同!
  
  我认为ado.net 和 nhibernate是完全不同层次的东西。 他们之间的关系有点类似于:封装了Win32 API调用的拖管对像与该Win32 API本身的关系。  

    我本人对NHibernate没有研究。只是听同事讨论过,对于NHibernate的性能优劣,框架的好坏,我不敢下结论。但这并不影响我对NHibernate整体的了解。我认为NHibernate是一套实现O/R Mapping的框架之一。 只要它没脱离这个范畴,我认为下面的理解应该是对的。
  
    下面论述一下我心目中的Ado.net与NHibernate的关系,欢迎大家指出缺点,补充我的NHibernate知识。谢谢!

    ado.net是.net平台上的托管的数据访问提供程序 ,是.net程序访问数据库的一个基础组件,绝大部分程序需要访问数据库都使用此组件。当然,你也可以调用Com组使用以前版本的Ado.

而 Nhibernate是一个数据映射的工具,它将数据库表中的数据映射成各种业务对像的形式。 其实我们不用Nhibernate一样可以做到映射,我们将数据库表中的字段组合成一个类就行了。只是Nhibernate可以实现自动化,有一个良好的框架,有良好的对像缓存机制。

 ado.net 与NHibernate的关系:

    ado.net提供数据访问的底层功能,而NHibernate是在Ado.net之上提供将数据封装成对像的一个框架。 换句话说: NHibernate同样是使用Ado.net来访问数据库的。 所以,Nhibernate与Ado.net的关系可以认为是: 调用和被调用的关系。
所以,“我使用了Nhibernate,代替了Ado.net”;, 是不准确的, 拿ado.net 与Nhibernate对比也是不恰当的。 两者跟本不是一回事。 就好比有人拿微软的DataAccess Application Block 与Ado.net对比而得出 DataAccess Application Block 比Ado.net更好一样搞笑。 实际上,它只是对于Ado.net的再一次封装。是在Ado.net上面再加一层,使用NHibernate实际上就是通过NHibernate间际使用Ado.net. 所有与Ado.net打交道的事情全部由NHibernate代劳了。

所以如果按以下方式定义Nhibernate的话,我表示认同:

Nhibernate是采用面向对的方式对Ado.net数据访问进行了进一步的封装,通过隐藏Ado.net调用的细节,隐藏了Sql和数库库表的操作。实现了数据库表与业务对像的自动映射,并提供了数据对像缓存和各种事件机制。 有效解决了我们人工进行数据库和业务对像映射时的 代码量大的问题。缓存功能缓解了数据库映射所带来的性能问题。 让我们能够以比较小的代价实现更好的面向对像的数据库程序开发。