实体框架还是其他? [关闭]

Posted

技术标签:

【中文标题】实体框架还是其他? [关闭]【英文标题】:Entity Framework or something else? [closed] 【发布时间】:2010-06-01 16:45:52 【问题描述】:

我刚刚从 C 切换到 C#,并且想花一些时间学习数据库工作。我对以下选项感到不知所措:Linq-to-sql、ADO.NET。 nHibernate,EntityFramework,普通的旧 sql(我已经习惯了)。由于我只有有限的“学习”时间(每天大约 2.5 小时),我应该把时间花在哪里?

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

如果我学习 EF,这些知识会很容易转移到 nHibernate 中吗?

更新:我决定从 nHibernate 开始。虽然 EF 4.0 修复了许多缺点,但我现在没有 VS2010,并且不会再有 1 年。所以 nHibernate 是现在的人选。

【问题讨论】:

另见:***.com/questions/146087/best-performing-orm-for-net 和 ***.com/questions/206197/… 【参考方案1】:

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

但选择 Microsoft 投资的工具不会让您破产;在实体框架发布之前,许多公司甚至都没有认真考虑使用 ORM。就个人而言,我真的不希望为那些推迟此类决策的公司工作,直到他们的供应商找到一个可以接受的解决方案,但事实是,很多公司正在(或将)使用实体框架。

使用实体框架绝对没有任何问题,尽管我怀疑如果您在一个真实项目中使用 EF 4 周,而 NHibernate 大约 4 周,并且项目中有多个开发人员,那么很有可能您会发现 NHibernate 更简单。以我的经验,EF 一开始看起来要简单得多,但使用的时间越长,它就会变得越毛茸茸。 NHibernate 一开始看起来和感觉起来都更难,但使用时间越长越简单和明显。

【讨论】:

谢谢。我将使用 nHibernate(请参阅我在原始问题中的更新)。只是一点点“我真的不想为……的公司工作”。有时你别无选择,尤其是在经济不景气而你有 4 个嘴要喂的时候。 同意。但是我发现,与在整个职业生涯中只追求一个供应商的工具相比(我在 MS 工作了 7 年;我认为自己固执己见——但-不可知论者)。如果您所在的地区有相当多样化的选择并且相当有能力,那么您通常仍然可以选择。 +1 .. 啊,当你在写文章的过程中出去时会发生这种情况(猜想我们在同一页上,请查看我的太长版本)。不能再同意了。查看我的帖子以获取此处提到的一些技术和想法的链接以及进一步阅读。【参考方案2】:

与其选择您认为可能会被聘用的东西,不如关注 EF(也许)作为解决整个 ORM 问题的具体示例。尽管倾向于 EF,但您未来的雇主可能是 nHibernate 公司,或者有自己的本土解决方案。学习 EF,但要利用这些经验来了解 ORM 的来龙去脉。

【讨论】:

啊,是的,我肯定想要一些可以转移经验的东西。谢谢。【参考方案3】:

EntityFramework 是 Microsoft 所提出的数据库技术。它包含了很多 Linq-to-Sql 的功能。我将从 ADO.NET 开始。您也会经常遇到 ADO.NET。

就像评论说的那样,Linq-to-sql 也不再先进了。

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

【讨论】:

+1。另外值得一提的是,Linq-to-SQL 似乎不会在下一个版本中进步,只会向后兼容。 EntityFramework 将在 .NET 4.0 中升级,并且可能会在下一个版本中升级。【参考方案4】:

如果您想探索 Entity Framework,Julie Lerman 的 this series of Pluralsight videos 将展示您需要的许多基础知识。正如 Kevin 所提到的,微软对 LINQ-to-SQL 的重视程度较低,而对 LINQ-to-EF 的重视程度更高。

【讨论】:

这是非常有用的信息:如果 MS 在 LINQ-to-SQL 上花费的时间更少,那么我几乎不会花时间。 我只是看了视频,但示例使用的是 VS 2010。我将使用 VS 2008 查找视频。 @RonJ - 是的,他们都在使用 .NET 4.0。最新的 .NET 版本为 Entity Framework 提供了一些急需的支持(有些人会说“牙齿”)。【参考方案5】:

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

【讨论】:

我可以将 nHibernate 知识转移到 EF 或者它们甚至不接近吗? 是的,您可以将您的 NHibernate 知识转移到几乎任何其他框架。那是因为 NH 非常灵活,会教你许多处理 ORM 问题和情况的方法。我发现,在向大三学生教授 NHibernate 时,他们开始以比以前更好的方式使用其他 ORM。【参考方案6】:

(很抱歉前面的文章很长,但我决定尝试为两个主要框架提供一些背景知识)

我想补充一点,使用非 Microsoft 技术的优点是可以创建更大的问题鸟瞰图,并防止您将自己锁定在 .NET + Entity + SQL Server 循环中(即使 Entity与数据库无关)。

您可以考虑使用 NHibernate。它可以说是最成熟的开源 ORM 框架之一。它速度很快,被大型和超大型企业使用。还有它最大的弱点:NHibernate 被认为有一个相当陡峭的学习曲线。如果你走这条路,我可以推荐曼宁出版的优秀书籍《NHibernate In Action》。

NHibernate 的许多弱点已从两个方面消除:best practice ORM 企业已在S#arp architecture (downloads at Github now) 中实现,其中还涵盖了全自动映射from database to MVC architecture。 S#arp 架构让复杂的 NHibernate 场景变得轻而易举(但仍有陡峭的学习曲线)。

另一方面是通过Fluent NHibernate 进行的简单配置部分,它创建了“一个维护点”的情况:只需在C# 中编写您的实体对象,调用Config,如果没有,则创建数据库'不存在。为您节省大量时间。 Fluent 确实使与 NHibernate 一起工作,就像它一直应该做的那样(实际上,就像 EF 一样)。

请注意,除非最近发生更改,否则实体框架需要更改存储过程的数据库,这就是我个人很少应用它的原因。此外,除非您自己付出很多努力,否则 EF 在企业中的扩展性并不好。当您拥有现有数据库、大型企业需要它或不想更改您已经创建的内容(包括触发器、SP、约束)时,NHibernate 会大放异彩。

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

【讨论】:

【参考方案7】:

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

http://summerofnhibernate.com/

谢谢 -下摆

【讨论】:

以上是关于实体框架还是其他? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

带有 XML 文件的实体框架 [关闭]

实体框架作为数据库代码的类型检查/验证系统 [关闭]

向客户端发送数据的最佳实践是啥:返回实体还是 dto? [关闭]

实体框架 4 还是 DataSet?

为啥选择实体框架? [关闭]

DLinq 演变成哪一个——Linq to SQL 还是实体框架?