MS Entity Framework与NHibernate及其衍生组件(FluentNHibernate、Linq for NHibernate)的比较

13

我刚读了这篇关于实体框架4(实际上是版本2)的文章

实体框架似乎比第一个版本有了巨大的改进。因此,我从未在任何项目中使用过EF,因为我认为与NHibernate相比,EF还不够成熟。

NHibernate及其当前的FluentNHibernateLinq for NHibernate by Ayende Rahien贡献

我的感觉是,微软仅仅是在试图夺回NHibernate第二个版本推出时失去的地盘。尽管如此,我的担忧如下(没有特定顺序):

  • EF4是否会变得不那么XML冗长?
  • EF4是否兼容除SQL Server以外的底层数据存储?
  • 使用EF4而不是FluentNHibernate或NHibernate本身的最大好处是什么?
NHibernate是一个很棒的工具,我想每个人都会同意。由于它的前身Hibernate,我们可以很容易地找到文档、教程和示例应用程序来熟悉它。但对于FluentNHibernate就不是这样了。特别是对于我现在正在开发的项目而言,它要求我进一步调查NHibernate及其选项(例如FluentNHibernate),以便记录NHibernate和FluentNHibernate技术的使用规则和最佳实践。因此,作为一个被VB.NET所束缚的C风格开发者,我无法找到一些VB.NET中提供的语法等效性来匹配所提供的示例,尽管我已经走了很远。
我相信NHibernate是一个最好的选择,但作为一名软件顾问,我不能(也不想)错过重要的技术变革、改进和演进。
尽管我读到了关于EF1的负面评论,但EF4似乎非常有前途。你们都对NHibernate和Entity Framework有什么看法?对于我来说,我正在被所有这些阅读搞得困惑不已。我需要你们帮助我理清思路。
谢谢大家!

根据回答的赞数,我已经接受了得到最多赞的答案。此外,你们所有人都有很好的评论和答案,并为我未来学习这两种技术做出了启发性的决定。我要感谢你们所有人,很抱歉不能接受你们所有人的答案作为我的问题的“解决方案”。谢谢! - Will Marcouiller
3个回答

5
我对EF几乎一无所知,但是快速浏览提供的链接后我认为EF没有类似于Fluent NHibernate的自动映射功能的等效物

编辑:一些评论者指出了一些关于EF的自动映射链接,但是并不清楚它是否像FNH那样强大(例如能否自动映射其他对象的集合)。

个人而言,我喜欢以面向对象的方式设计POCO,并让工具处理所有与关系型数据库的映射相关的繁琐工作。

就我所知,FNH仍然拥有最强大的自动映射能力。

请访问Fluent NHibernate自动映射了解更多信息。


2
实际上,EF提供了一个配置构建器实用程序,它非常类似于Fluent NHibernate。这里有一篇文章介绍它:http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx - Sergey
我认为这并没有直接得到解决,但是在http://blogs.msdn.com/efdesign/archive/2009/08/03/code-only-enhancements.aspx#9857189的评论中暗示它默认情况下进行自动映射。 - Jeff Hardy
@Tom Bushell:我不明白,我刚刚从零开始点赞,结果得分为-1 =( 它还说答案太旧无法更改。=( 在SO上有没有办法可以修复这个问题或向管理员报告? - Will Marcouiller
@Will:根据一些评论,我编辑了我的答案 - 或许现在你可以改变你的投票了。 - Tom Bushell
@Tom Bushell:我已经点赞了,至少投票数没有被设置为-1。不过,它不会让我再次点赞以给你应得的+1票。=( - Will Marcouiller
显示剩余9条评论

4

EF4会变得不那么XML冗长吗?

总的来说,我没有看到任何迹象表明XML会有很大的改变。微软在v4中为EF提供了类似于Fluent的接口,但这是一个附加组件/单独下载。

EF4除了SQL Server还兼容其他基础数据存储吗?

它现在就兼容,未来也将保持兼容性。LinqToSql仅支持SQL Server,但EF从未仅支持SQL Server。

与FluentNHibernate或NHibernate本身相比,选择EF4的最大好处是什么?

说实话,并没有太多的好处。虽然有一些小的差异,但总的来说,即使在EFv4中,NHibernate仍然领先于EntityFramework多年。

作为顾问,把时间花费在成为NHibernate和Entity Framework的专家上可能是值得的。你可能会继续在现实世界中看到它们两个。微软在数据访问方面往往注意力不集中,所以从现在起几年后,Entity Framework会在哪里并不清楚。因为它来自微软,你可以肯定会有大量的开发人员使用EF。


我曾经听说EF只支持SQL Server,但这可能只是谣言!=)我曾经使用过LinqToSql实现的ORM,虽然它只支持SQL Server,但我并不讨厌它。尽管它是一个不错的方法,但由于它只支持SQL Server,我无法真正使用它。作为一个框架开发者,我需要熟练掌握我的代码以快速反应。无论如何,我想你说得对,EF和NH都将在不久的将来共存。非常感谢您的观点!您确实帮助我理清了关于这个主题的思路。 - Will Marcouiller

3
请注意,这只是我的个人看法,我不是ORM工具方面的任何权威,以下为我的见解:
在EF中,我认为最大的好处之一是GUI映射。在我看来,这节省了很多时间,但也正是EF XML映射如此冗长的原因。不幸的是,它们并不适合手动处理。我不知道它是否会改变。我所知道的是,在以前的版本中,EF提供的GUI非常容易出问题。我仍然听到人们抱怨它不能很好地扩展,特别是在更大、更复杂的架构中,它可能会错过一些东西,你最终要直接处理映射。我的观点是随着EF的发展,XML映射将变得更简洁。另外,EF还支持流畅的映射,这也很有帮助。最后,另一个重要的事情是能够更改EF生成的代码模板,如果你更喜欢数据库驱动的设计而不是先设计再开发的方法。
另一个好处是它来自微软,他们有足够的资金让这个框架变得非常棒。它在过去几年中发展迅速。我认为它将在一年左右的时间内与NHibernate平起平坐。目前,我认为NHibernate是更好的选择。它更稳定、更成熟。相对容易配置,最重要的是性能更好。我认为如果你设计得明智,从一个框架转移到另一个框架将是非常简单的。
EF只是一个抽象层。我相信有Oracle的提供商,所以我不明白为什么随着它的发展不能添加更多的提供商。

谢谢!我甚至不知道有一个GUI可以设计所有东西。我以为你必须像NHibernate一样从头开始。这可能解释了XML映射文件的冗长。我也不知道它允许数据库驱动,这仍然是今天常见的方法。您是否知道它是否允许反向工程现有系统重写为.NET,但我们希望保留现有数据库? - Will Marcouiller
3
NHibernate 有 GUI/可视化设计工具。 - Michael Maddox
2
EF4允许采用设计优先的方法。它允许您插入自己的领域模型,并使用XML映射或类似于Fluent Nhibernate的流畅代码方法将其映射到数据结构中。另一个选项是利用现有结构并基于此创建领域模型,这是基于数据库的方法。EF4允许您调整用于领域生成的模板,这可以成功消除EF产生的一些膨胀。 - Sergey
1
你现有的表格需要更改的唯一情况是,如果你决定开始对数据进行版本控制,以便让EF处理并发操作。我的意思是,这是处理此类情况的选项之一。你也可以通过编程方式实现,而无需进行任何数据库更改。否则,你可以重用现有的结构。 - Sergey
2
@Micheal Maddox:NHibernate有哪些GUI/Visual Designers?我不知道任何一个。 - Will Marcouiller
1
Michael 可能是对的。我认为 Sculpture 有一个 NHibernate 的模板。虽然我从未使用过,但它看起来是一个很酷的解决方案。 - Sergey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接