|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我以前很喜欢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网页编程已经发展了很多年了,因此这些工具就很多了。他们很多都是类似的。 |
|