选择实体框架作为针对 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,利弊?的主要内容,如果未能解决你的问题,请参考以下文章