选择实体框架作为针对 Nhibernate 的默认实现 ORM,利弊?

Posted

技术标签:

【中文标题】选择实体框架作为针对 Nhibernate 的默认实现 ORM,利弊?【英文标题】:Choosing Entity framework as default implementation ORM against Nhibernate, cons and pros? 【发布时间】:2012-04-12 07:45:17 【问题描述】:

我在一家开发公司工作,开发中小型基于Web的项目,我们主要使用微软技术,目前处于技术选择阶段,我们正在研究ORM,我们需要选择标准的ORM对于我们未来的项目,目前我们将选择范围缩小为两个:-

• 休眠:-

    成熟。 开源。 功能丰富。 可配置且灵活,达到最高水平。 得到强大社区的大力支持。 在许多地方都证明是成功的。

• 实体框架:-

    微软产品;这意味着与其他 Microsoft 产品紧密集成。 高度支持和大量在线资源,拥有相当强大的在线社区。​​li> 发展非常快,修复非常快,而且一天比一天好。 LINQ。 学习曲线比 Nhibernate 低。

技术分别根据以下衡量:-

    易于使用 - 在我们的项目中,时间确实是一个关键因素。 长期决定,我的意思是我们不会 不断在技术之间转换。 与 Microsoft 产品集成。 在合规性工具(例如 Nhibernate 的 activerecord)、社区和版本方面的支持。 这将是我们将使用的唯一标准。 配置的灵活性。 特性 - 我们不需要很多复杂的映射,也不需要二级缓存,我们现在可以用 SP 代替批处理。

我的问题 选择实体框架来对抗 Nhibernate,作为我们公司未来 ORM 的默认实现,从长远来看,这样的决定有什么利弊?

请不要误会我的意思;我知道 Nhibernate 暂时是正确的答案,但考虑到 EntityFramework 的快速发展,它是否是近期甚至远期的正确选择。


我在研究中依赖的一些资源:-

http://ayende.com/blog/4351/nhibernate-vs-entity-framework-4-0

NHibernate, Entity Framework, active records or linq2sql

Which ORM tool should I use for .Net development

http://blogs.msdn.com/b/adonet/archive/2012/03/22/ef5-beta-2-available-on-nuget.aspx

【问题讨论】:

这是一个有趣的问题,但它会引发讨论而不是明确的答案(因为没有答案)。我建议你重新提出你的问题。我不建议将问题设为 -1 或关闭。 好的,我会为我的问题找到更好的格式 “EntityFramework 的快速演进”?不要吸烟和编码,伙计。 EF 甚至不支持基本的东西,比如缓存,在第一次发布几年后。不要误会,我确实使用 EF,但仅用于 RAD 和性能不重要的小型项目。 【参考方案1】:

我知道目前 Nhibernate 是正确的答案,但是 在不久的将来,甚至是遥远的未来,它会是正确的选择吗? 未来,考虑到 EntityFramework 的快速发展。

没有人能回答这个问题。我相信即使是 ADO.NET 团队也会有这个问题,因为目前甚至没有未来实现功能的路线图。目前开发过程主要由Data UserVoice 驱动,我们无法知道下个月可以期待哪些功能,明年可以期待哪些功能以及我们永远不会拥有哪些功能。


没有正确的答案。此外,您尝试执行的整个“标准化”过程是错误的。为您当前的问题使用正确的解决方案!为将来必须解决的任何问题选择单一的“标准”,而不知道那个问题,也不知道当时有哪些工具可用,这是愚蠢的。

您的整个想法与敏捷性和最佳实践背道而驰。它甚至可以增长到internal frameworks or SW factories。 .NET 开发是高度动态的领域。今天可以认为是好的选择明年可能会被弃用,所以不要用“标准”束缚自己。未来可能会有更有趣的选择或更有趣的技术和实践转变(例如 NoSql 数据库)。

如果您想要长期战略解决方案,请使用大型机和 COBOL。他们已经证明了自己的生命。

【讨论】:

我不同意你关于“标准化”的观点,并不是所有的开发者都有能力轻松掌握不同的技术,如果你放任自流,每个人都会选择不同的技术,而你最终会在你开始工作之前完成需要技术学习曲线的项目,我也主要在开始时说过,这意味着如果项目需要,我们可以灵活处理。 我不是说它应该是不受控制的——受控过程和刚性过程是不一样的。您甚至可以拥有不同技术的专家,并将他们转移到需要的项目中。在不久的将来,根据当前对您的需求的适用性来选择技术(因为它很可能在不久的将来不会改变)。不要为遥远的未来做出选择,直到它成为不久的将来。【参考方案2】:

我建议,在做出决定时,您现在应该专注于 NHibernate 和 EF 提供的功能。查看您必须提交的精确要求并将它们与 ORM 进行匹配。在您上面的问题中,您应该注意也可以对 NHibernate 执行 linq 查询。此外,您已经忽略了对二级缓存的需求。如果您正在寻找一个长期灵活的平台,您绝对应该考虑到它。

【讨论】:

以上是关于选择实体框架作为针对 Nhibernate 的默认实现 ORM,利弊?的主要内容,如果未能解决你的问题,请参考以下文章

将引用作为属性的 Nhibernate 映射值对象

Nhibernate 与其他 ORM 的区别是啥?

ADO.NET 实体框架与 NHibernate [关闭]

实体框架和 NHibernate - 缓存仍然是服务层的责任吗?

实体框架与 NHibernate - 性能

ABP官方文档翻译 9.3 NHibernate集成