实体框架还是其他什么?

时间:2010-06-01 16:45:52

标签: c# .net database entity-framework nhibernate

我只是从C转换到C#,并希望有时投入学习数据库工作。我对这些选项感到不知所措:Linq-to-sql,ADO.NET。 nHibernate,EntityFramework,普通的旧sql(我习惯了这个)。由于我只有有限的“学习”时间(每天约2.5小时),我应该在哪里投入时间?

我不想学习下个月会过时的东西,或者没有人会雇用我的东西。

如果我学习EF,这些知识是否可以轻易转移到nHibernate?

更新:我决定从nHibernate开始。虽然EF 4.0已经修复了许多缺点,但我现在还没有VS2010并且赢了;而且还有1年的时间。所以nHibernate现在是男人。

7 个答案:

答案 0 :(得分:4)

不是选择你认为可能被聘用的东西,而是将EF(或许)作为解决整个ORM问题的具体例子。尽管倾向于EF,你的未来雇主可能是一个nHibernate的房子,或者拥有自己的本土解决方案。学习EF,但要运用这些经验来学习ORM的细节。

答案 1 :(得分:4)

就我个人而言,我认为NHibernate(加上FluentNHibernate和Linq to NHibernate)让我保持最大的理智。在实际项目中,为实体框架中的大型数据模型管理单个EDMX文件对于大型团队来说真的很痛苦;在NHibernate中,Fluent允许您跨多个C#文件分隔,或者HBM xml格式允许您使用多个XML文件。我最后一次使用Entity Framework时,除非你为每个模型分别使用DataContexts,否则这并不容易。 (如果最近以某种方式改变了,我为我的无知而道歉)。关于NHibernate最困难的事情可能会以某种方式让大多数ORM工具咬你:将对象图映射到关系模型是很棘手的。但是你可以对延迟加载,父/子关系等事情进行大量控制;按照惯例进行映射也是一个巨大的胜利,如果你使用Fluent。

但是你不会选择微软正在投资的工具;在实体框架发布之前,许多公司甚至都没有认真考虑使用ORM。就个人而言,我真的不想为那些推迟这样的决定的公司工作,直到他们的供应商找到一个可以通过的解决方案,但事实是,很多公司都(或将会)使用实体框架。

使用实体框架绝对没有错,虽然我怀疑如果你在真实世界的项目中使用EF 4周,而NHibernate愤怒了大约4周,有多个开发人员参与该项目,那么很有可能你会发现NHibernate更简单。根据我的经验,EF起初看起来要简单得多,但使用时间越长越好。 NHibernate一开始看起来和感觉都要困难得多,但是使用它的时间越长越简单也越明显。

答案 2 :(得分:2)

EntityFramework是微软所展示的数据库技术。它结合了很多Linq-to-Sql所做的事情。我将从ADO.NET开始。你也会遇到很多ADO.NET。

就像评论所说,Linq-to-sql也不再进步了。

http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx#ado.netenfrmovw_topic2

答案 3 :(得分:1)

如果您想探索实体框架,Julie Lerman的this series of Pluralsight videos演示了您需要开展的许多基础知识。正如凯文所说,微软不太重视LINQ-to-SQL,而是更多地关注LINQ-to-EF。

答案 4 :(得分:1)

NHibernate在继承映射方面具有更大的灵活性,与存储过程/数据库函数/自定义SQL /触发器的更好集成,对公式属性的支持,它只是比EF 4更成熟的平台。

答案 5 :(得分:1)

(对于未来的长篇文章感到抱歉,但我决定尝试给两个主要框架提供一些背景知识)

我想补充一点,使用非Microsoft技术的优势在于可以创建更大的问题鸟瞰图,并防止您将自己锁定到.NET + Entity + SQL Server周期中(即使实体是数据库不可知的。)

你可能会考虑NHibernate。它可以说是最成熟的开源ORM框架之一。它速度很快,被大型和大型企业使用。还存在最大的弱点:NHibernate被认为具有相当陡峭的学习曲线。如果你采取这条道路,我可以推荐Manning出版的优秀书籍“NHibernate In Action”。

NHibernate的许多弱点已从双方中解脱出来:best practice ORM企业已在S#arp architecturedownloads at Github now)中实施,其中也涵盖了全自动映射{{ 3}}。 S#arp架构使复杂的NHibernate场景变得轻而易举(但仍然有一个陡峭的学习曲线)。

另一方面是通过from database to MVC architecture的简单配置部分,它创建了“一个维护点”的情况:只需在C#中编写实体对象,调用Config并创建数据库如果它不存在。为您节省大量时间。 Fluent确实能够使用NHibernate,因为它一直都应该(实际上,就像EF一样)。

请注意,除非最近更改,否则该实体框架需要更改存储过程的数据库,这就是我个人很少应用它的原因。此外,EF不会在企业中扩展得太好,除非您自己添加了很多努力。当您拥有现有数据库时,NHibernate会闪耀,大型企业需要它,或者不想更改您已创建的数据库(包括触发器,SP,约束)。

从学习的角度来看:正如其他人所说,学习EF是一个好的开始,它很容易,并且有足够的文档。由于易于使用,较小的组织更有可能使用EF。中型到大型公司更有可能选择NHibernate(以及类似的企业级映射系统)。 EF相当新颖,NHibernate历史悠久。两者都有其优点。两者都适用于LINQ。两者都很好(很好)理解并在你的简历中找到一个位置。

答案 6 :(得分:0)

我和你在同一条船上,我发现夏天的NHibernate系列非常有用。

http://summerofnhibernate.com/

由于 -Hem