ASP.NET编程:对照NHibernate和Entity Framework仓酷云
我以前很喜欢Serv-U,自从它用net网页编程重写之后我就再也没用过,实在是太慢了,我宁可用IIS搭建FTP,虽然IIS搭建FTP在权限管理上很不灵活。葡萄牙的一名开辟者RicardoPeres比来公布了一篇文章,以看起来无成见的情势对抢先的两种.NETORM:NHibernate和EntityFramework举行了对照。我们倡议思索利用这两种框架的人都应当读下他的文章,NHibernate和EntityFramework之间的区分,别的还将指出一些关头的区分。从架构上看,NHibernate基于Java的HibernateORM。Ricardo写道:
在NHibernate中,事情单位和设置项和模子实例都互相自力。你起首会创立Configuration对象,在个中你会指定一切NHibernate设置,像要利用的数据库和言语、批处置的巨细、映照干系等等,然后你会依此构建ISessionFactory。ISessionFactory会持有与特定命据库绑定的模子和元数据,和来自于Configuration对象的设定,而且,一样平常每一个历程中只要一个实例。终极,你会基于ISessionFactory创立ISession的示例,它是事情单位(UnitofWork)和标识符舆图(IdentityMap)的NHibernate体现情势。这是一种轻量级的对象,它实质上会依据必要翻开和封闭数据库毗连,并跟踪与之相干的实体。ISession对象很简单创立和烧毁,由于一切的模子庞大性都存储在ISessionFactory和Configuration对象中。
批评者MortenMertner说:“我永久都不会利用NHibernate。只管它具有很棒的特征列表,但它并不是一种可以轻松利用的产物,并且API和计划中一直带有遗传自Java的滋味(一样,良多JavaAPI都太企业化,而且架构过于复杂;了局会与你想要的天差地别)。”
EntityFramework遵守的是加倍传统的.NET计划,个中一切统统都封装在独自的ObjectContext大概DbContext中。这让利用对象加倍复杂,可是弱点在于“类并没有因而是轻量级的,由于它有与NHibernate相似的内容,而且一样平常不会看到如许的例子:实例能够缓存在字段中。”
关于映照,NHibernate和EntityFramework之间的关头区分在于,前者撑持基于XML的映照文件,该文件能够自力部署。在实际上,这让你能够针对分歧的数据库schema利用不异的对象模子,而不必要从头编译使用程序。但在理论中很少这么利用。
在良多方面陈旧一些的NHibernate要优于EntityFramework。Ricardo供应了更多细节,并扼要地总结以下:
[*]联系关系:都撑持一对1、一对多、多对多,可是NHibernate还撑持各类排序、未排序和索引的选项。它乃至另有稳定的(immutable)、索引的(indexed)列表。
[*]缓存:NHibernate供应了带有大批完成的二级缓存。EntityFramework没有任何对此内建的撑持,可是有些增添二级缓存的例子。
[*]ID天生:NHibernate供应了也许十二种战略,这取决于你怎样盘算。EntityFramework只为SQLServer供应了次要的三种:标识符列、GUID、和手动赋值。
[*]事务:EntityFramework只要两种基于事务的扩大点:ObjectMaterialized和SavingChanges。“NHibernate具有十分丰厚的事务模子,表露了凌驾20种事务,有些针对同步前实行(synchronouspre-execution),有些针对异步后实行(asynchronouspost-execution)”。
[*]级联:“两种框架都撑持汇合和联系关系的级联:当实体被删除的时分,相干的籽实体也会被删除。NHibernate还供应了一种特征,能够把籽实体上的外键设置为NULL,而不删除它们。”
[*]清算变动:NHibernate供应了一种主动形式,个中在需要的时分会保留变动,像“假如有一种实体范例的脏实例,而查询是针对这类实体范例实行”。FlushMode.Auto实践上是默许值,但偶然会看到因为主动扫除而招致功能成绩。
也有一些范畴中,EntityFramework会比NHibernate好,例如说:
[*]跟踪变动:只管两种框架在事情单位级别默许都可以跟踪变更,而EntityFramework还供应了自我跟踪实体(self-trackingentities)。
[*]整合:EntityFramework固然会与VisualStudio和各类ASP.NET和WCF类库有很好的绑定。
[*]文档:“这是另外一种EntityFramework体现十分好的中央:NHibernate短少针对初学者的文档,而且也没有与其最新版本同步的最新API参考。”
[*]查询:Craig写到:“NHibernate有更丰厚的特征,但有一个范畴除外,那就是对Linq的撑持。由于关于良多用户来讲,Linq大概别的查询言语都是ORM中最可见的部分,它会让人对功效发生毛病印象。”
另有某些范畴,两种框架都能够做出改善,像批处置功效。当必要真正撑持SQL的初级特征——像通用表表达式——的时分,两种ORM框架都没法撑持SQLAlchemy。
我们应当发明两个项目都很活泼,常常会有按期的改善。以是,假如两者都可以满意你的最小需求,那末思索就更多会合在程序库的计划形式和哲学上,而不是在特征列表上。
检察英文原文:ComparingNHibernateandEntityFramework
你所列的那些其实差不多都可以称为应用服务器(servlet应该说是一种语言更合适)net网页编程是开放的,相同的工具就会有很多公司在做,加上net网页编程已经发展了很多年了,因此这些工具就很多了。他们很多都是类似的。 使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。 主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。 提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
页:
[1]